【问题标题】:iOS Keyboard cover some UITextField in static tableview celliOS键盘覆盖静态tableview单元格中的一些UITextField
【发布时间】:2017-10-02 13:30:27
【问题描述】:

我的静态 UITableView 的一个单元格中有几个 UITextField。他们中的大多数人在获得焦点时都很好。

但是当某些字段获得焦点时(例如当我单击 Unit No 字段时),单元格会跳转并像这样被键盘覆盖。

完全不知道。任何想法?谢谢。

【问题讨论】:

  • 终于找到原因了。如果单元格高度超过屏幕高度,则会导致此问题。

标签: ios uitableview


【解决方案1】:

尝试使用这个 pod https://github.com/hackiftekhar/IQKeyboardManager,它将涵盖所有键盘场景。

如果您想使用自定义代码,您必须在 viewWillAppear 中订阅 UIKeyboardWillShowUIKeyboardWillHide,并在 viewWillDisappear。之后覆盖 touchesBegan 这将处理您在屏幕上的所有触摸,您可以在此函数中结束编辑。

我的示例代码:

override func viewWillAppear(_ animated: Bool) {

    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: .UIKeyboardWillShow, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: .UIKeyboardWillHide, object: nil)

}

override func viewWillDisappear(_ animated: Bool) {

    NotificationCenter.default.removeObserver(self)
}

func keyboardWillShow(notification: NSNotification) {
  if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
      UIView.animate(withDuration: 1, animations: {
            self.view.bounds.origin.y += keyboardSize.height
      }
  }
}

func keyboardWillHide(notification: NSNotification) {
    self.view.bounds.origin.y = 0
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

    self.view.endEditing(true)
}

【讨论】:

  • 这是一个很好的图书馆。但不能解决我的问题。当我移动到某些字段时,键盘仍会覆盖该字段。
  • 如果您使用IQKeyboard Manager,在viewWillAppear中调用super.viewWillAppear,不调用superView会导致IQKeyboard Manager出现此类问题
  • 还是一样。一些具有焦点的 UITextField 仍然被键盘挡住。
【解决方案2】:

您是否尝试过 IQKeybordManager POD。它自动管理一切。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-19
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    • 2019-09-14
    相关资源
    最近更新 更多