我正在构建一个包含UITableViewController
的应用。在VC中,我放了一些文本字段来接受用户输入。我使用表格视图控制器,因为当键盘出现时,它更容易向上移动视图。有关详细信息,请参阅here。
当我在学习如何隐藏键盘时,当用户通过观看其中一个新闻的视频来点击其他地方时,我被告知要使用
view.endEditing(true)
在touchesBegan
方法中。
我还发现了如何使用滑动手势识别器,以便在用户滑动时隐藏键盘。
但是,所有这些都是普通的视图控制器。当我使用表视图控制器执行此操作时,没有任何作用! touchesBegan
和UISwipeGestureRecognizer
都不起作用!当我向下滑动或点击某处时,键盘就会停留在那里!
为什么会发生这种情况?如何在表格视图控制器中隐藏键盘?
编辑:
相关代码都在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)
}
我认为你通常这样做,对吧?我在普通的视图控制器中尝试了这个并且它工作了。它只是在表视图控制器中不起作用。
答案 0 :(得分:2)
如果要为UITableView覆盖-touchesBegan:withEvent:,则需要继承UITableView。
touchesBegan:withEvent:仅发送到UIView的子类。你正在你的控制器中实现touchesBegan:withEvent:所以它不会起作用......
您可以使用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()。
答案 1 :(得分:2)
您可以在tableView.keyboardDismissMode = UIScrollViewKeyboardDismissMode.onDrag
viewDidLoad()
功能上添加UITableViewController
override func viewDidLoad() {
super.viewDidLoad()
tableView.keyboardDismissMode = UIScrollViewKeyboardDismissMode.onDrag
}
答案 2 :(得分:1)
默认情况下,UITableView处理所有无法覆盖的手势,除非您在tableView或句柄scrollViewWillBeginDragging:
委托之上添加手势。
使用scrollViewWillBeginDragging:
可以隐藏键盘。只有在用户滚动时才会调用它。触摸和UIGestures不起作用。
答案 3 :(得分:0)
您应该在tableView中添加手势识别器。
let dismissTap = UITapGestureRecognizer(target: self, action: "dismissKeyboard:")
dismissTap.numberOfTapsRequired = 1
view.addGestureRecognizer(dismissTap)
然后在你的dismissKeyboard选择器中:
func dismissKeyboard(recognizer: UITapGestureRecognizer) {
view.endEditing(true)
}