如何在UITableViewController中隐藏键盘?

时间:2016-01-17 04:33:52

标签: ios swift keyboard

我正在构建一个包含UITableViewController的应用。在VC中,我放了一些文本字段来接受用户输入。我使用表格视图控制器,因为当键盘出现时,它更容易向上移动视图。有关详细信息,请参阅here

当我在学习如何隐藏键盘时,当用户通过观看其中一个新闻的视频来点击其他地方时,我被告知要使用

view.endEditing(true)

touchesBegan方法中。

我还发现了如何使用滑动手势识别器,以便在用户滑动时隐藏键盘。

但是,所有这些都是普通的视图控制器。当我使用表视图控制器执行此操作时,没有任何作用! touchesBeganUISwipeGestureRecognizer都不起作用!当我向下滑动或点击某处时,键盘就会停留在那里!

为什么会发生这种情况?如何在表格视图控制器中隐藏键盘?

编辑:

相关代码都在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)
}

我认为你通常这样做,对吧?我在普通的视图控制器中尝试了这个并且它工作了。它只是在表视图控制器中不起作用。

4 个答案:

答案 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)
}