【问题标题】:How to hide keyboard in UITableViewController?如何在 UITableViewController 中隐藏键盘?
【发布时间】:2017-10-06 21:46:53
【问题描述】:

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

当我通过观看 thenewboston 的一个视频来学习如何在用户点击其他地方时隐藏键盘时,有人告诉我要使用

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

我想这就是你通常的做法,对吧?我在一个普通的视图控制器中试过这个并且它有效。它只是在表格视图控制器中不起作用。

【问题讨论】:

  • 用相关代码更新您的问题。
  • @maddy 已编辑。我认为这就是所有相关代码。
  • 是否调用了这两个函数中的任何一个?
  • @maddy 不,他们没有被调用。这真的很奇怪。
  • 并非如此。表格视图可能会阻止手势工作。

标签: ios swift keyboard


【解决方案1】:

如果你想为你的 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()。

【讨论】:

  • 我应该把第一个代码sn-p放在哪里?视图控制器?
  • 是的,在控制器的 viewDidLoad 中,还检查一下,我已经编辑了一些代码,因为您正在使用 tableViewController 将 tableView.addGestureRecognizer(tap) 替换为 self.view.addGestureRecognizer(tap)
【解决方案2】:

您可以在UITableViewControllerviewDidLoad() 函数上添加tableView.keyboardDismissMode = UIScrollViewKeyboardDismissMode.onDrag

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.keyboardDismissMode = UIScrollViewKeyboardDismissMode.onDrag
}

【讨论】:

    【解决方案3】:

    默认情况下,UITableView 处理所有不能被覆盖的手势,除非您在 tableView 顶部添加手势或处理 scrollViewWillBeginDragging: 委托。

    通过使用scrollViewWillBeginDragging:,您可以隐藏键盘。只有当用户滚动时才会调用它。触摸和 UIGestures 不起作用。

    【讨论】:

      【解决方案4】:

      您应该在 tableView 中添加手势识别器。

      let dismissTap = UITapGestureRecognizer(target: self, action: "dismissKeyboard:")
      dismissTap.numberOfTapsRequired = 1
      view.addGestureRecognizer(dismissTap)
      

      然后在您的dismissKeyboard 选择器中:

      func dismissKeyboard(recognizer: UITapGestureRecognizer) {
           view.endEditing(true)
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-01-09
        • 2020-10-04
        • 2011-12-24
        • 2019-06-30
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        • 2011-03-24
        相关资源
        最近更新 更多