如何在 UITableViewController 中隐藏键盘?
How to hide keyboard in UITableViewController?
我正在构建一个包含 UITableViewController
的应用程序。在 VC 中,我放置了一些用于接受用户输入的文本字段。我使用 table 视图控制器,因为在出现键盘时更容易向上移动视图。有关详细信息,请参阅 。
当我通过观看 thenewboston 的视频学习如何在用户点击其他地方时隐藏键盘时,有人告诉我使用
view.endEditing(true)
在 touchesBegan
方法中。
我还了解了如何使用滑动手势识别器,以便在用户向下滑动时隐藏键盘。
但是,所有这些都带有普通的视图控制器。当我使用 table 视图控制器执行此操作时,没有任何效果! touchesBegan
和 UISwipeGestureRecognizer
都无效!当我向下滑动或点击某处时,键盘就停留在那里!
为什么会发生这种情况,如何在 table 视图控制器中隐藏键盘?
编辑:
相关代码均在UITableViewController
的子类中:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
view.endEditing(true)
}
@IBAction func swipedDown(sender: UISwipeGestureRecognizer) { // This is connected to a swipe gesture recogniser
view.endEditing(true)
}
我想你通常就是这样做的,对吧?我在一个普通的视图控制器中试过这个并且它有效。它只是在 table 视图控制器中不起作用。
您应该向 tableView 添加手势识别器。
let dismissTap = UITapGestureRecognizer(target: self, action: "dismissKeyboard:")
dismissTap.numberOfTapsRequired = 1
view.addGestureRecognizer(dismissTap)
然后在您的 dismissKeyboard 选择器中:
func dismissKeyboard(recognizer: UITapGestureRecognizer) {
view.endEditing(true)
}
默认情况下,UITableView 会处理所有无法覆盖的手势,除非您在 tableView 顶部添加手势或处理 scrollViewWillBeginDragging:
委托。
通过使用scrollViewWillBeginDragging:
您可以隐藏键盘。它只会在用户滚动时被调用。触摸和 UIGestures 将不起作用。
如果你想覆盖 -touchesBegan:withEvent: 对于你的 UITableView,你需要子类化 UITableView。
touchesBegan:withEvent:只发送给UIView的子类。您正在实施 touchesBegan:withEvent:在您的 controller.So 中,它不会工作...
你可以像这样用 UIGestureRecognizer 解决这个问题 -
let tap = UITapGestureRecognizer(target: self, action: Selector("handleTap:"))
tap.delegate = self
self.view.addGestureRecognizer(tap)
然后实现处理程序-
func handleTap(sender: UITapGestureRecognizer? = nil) {
// handling code
self.view.endEditing(true)
}
现在在相关位置调用 handleTap()。
您可以在 UITableViewController
的 viewDidLoad()
功能上添加 tableView.keyboardDismissMode = UIScrollViewKeyboardDismissMode.onDrag
override func viewDidLoad() {
super.viewDidLoad()
tableView.keyboardDismissMode = UIScrollViewKeyboardDismissMode.onDrag
}
我正在构建一个包含 UITableViewController
的应用程序。在 VC 中,我放置了一些用于接受用户输入的文本字段。我使用 table 视图控制器,因为在出现键盘时更容易向上移动视图。有关详细信息,请参阅
当我通过观看 thenewboston 的视频学习如何在用户点击其他地方时隐藏键盘时,有人告诉我使用
view.endEditing(true)
在 touchesBegan
方法中。
我还了解了如何使用滑动手势识别器,以便在用户向下滑动时隐藏键盘。
但是,所有这些都带有普通的视图控制器。当我使用 table 视图控制器执行此操作时,没有任何效果! touchesBegan
和 UISwipeGestureRecognizer
都无效!当我向下滑动或点击某处时,键盘就停留在那里!
为什么会发生这种情况,如何在 table 视图控制器中隐藏键盘?
编辑:
相关代码均在UITableViewController
的子类中:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
view.endEditing(true)
}
@IBAction func swipedDown(sender: UISwipeGestureRecognizer) { // This is connected to a swipe gesture recogniser
view.endEditing(true)
}
我想你通常就是这样做的,对吧?我在一个普通的视图控制器中试过这个并且它有效。它只是在 table 视图控制器中不起作用。
您应该向 tableView 添加手势识别器。
let dismissTap = UITapGestureRecognizer(target: self, action: "dismissKeyboard:")
dismissTap.numberOfTapsRequired = 1
view.addGestureRecognizer(dismissTap)
然后在您的 dismissKeyboard 选择器中:
func dismissKeyboard(recognizer: UITapGestureRecognizer) {
view.endEditing(true)
}
默认情况下,UITableView 会处理所有无法覆盖的手势,除非您在 tableView 顶部添加手势或处理 scrollViewWillBeginDragging:
委托。
通过使用scrollViewWillBeginDragging:
您可以隐藏键盘。它只会在用户滚动时被调用。触摸和 UIGestures 将不起作用。
如果你想覆盖 -touchesBegan:withEvent: 对于你的 UITableView,你需要子类化 UITableView。
touchesBegan:withEvent:只发送给UIView的子类。您正在实施 touchesBegan:withEvent:在您的 controller.So 中,它不会工作...
你可以像这样用 UIGestureRecognizer 解决这个问题 -
let tap = UITapGestureRecognizer(target: self, action: Selector("handleTap:"))
tap.delegate = self
self.view.addGestureRecognizer(tap)
然后实现处理程序-
func handleTap(sender: UITapGestureRecognizer? = nil) {
// handling code
self.view.endEditing(true)
}
现在在相关位置调用 handleTap()。
您可以在 UITableViewController
viewDidLoad()
功能上添加 tableView.keyboardDismissMode = UIScrollViewKeyboardDismissMode.onDrag
override func viewDidLoad() {
super.viewDidLoad()
tableView.keyboardDismissMode = UIScrollViewKeyboardDismissMode.onDrag
}