Swift 4.2 的 API 发生了一些变化。你需要做类似的事情。
//inside viewDidLoad
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)
然后我们将不得不支持功能。由于我们涉及选择器(这是 Objective C 的一部分),我们需要在函数中使用 @objc 前缀。
@objc func keyboardWillShow(_ notification:Notification) {
if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
tableView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: keyboardSize.height, right: 0)
}
}
@objc func keyboardWillHide(_ notification:Notification) {
if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
tableView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
}
}
如果您的 UITableView 有不同的名称,请更改函数内的变量 tableView。
另外,如果您想在用户触摸 TextView 或 TextField 外部时隐藏键盘,请执行以下操作。
//inside the viewDidLoad
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))
view.addGestureRecognizer(tap)
并实现如下选择器中给出的功能
@objc func dismissKeyboard() {
view.endEditing(true)
}