【问题标题】:Tap Gestures to Dismiss UITextField with TableView点击手势以使用 TableView 关闭 UITextField
【发布时间】:2015-12-23 21:59:00
【问题描述】:

我有一个带有 UITextField 的视图,它在它下面的 UITableView 上执行一些搜索操作。

问题是,当我设置点击手势以关闭 UITextField 之外的触摸键盘时,它似乎取消了我的 TableView 单元格的 didSelect 方法。

这是我目前在 viewDidLoad 中使用的代码:

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

    func handleSingleTap(recognizer: UITapGestureRecognizer) {

    self.view.endEditing(true)

    }

如何进行设置,以便 UITextField 之外的触摸关闭键盘,但仍允许我选择 TableView 单元格?

【问题讨论】:

  • 出于好奇;你为什么不在你的表格视图中使用UISearchController

标签: ios iphone swift uitableview uigesturerecognizer


【解决方案1】:

不需要添加任何手势来关闭 tableview 上的键盘,iOS SDK 本身提供了一个名为 keyboardDismissMode 的属性来关闭键盘。我们可以从 IB 本身获取此属性,请查看下图以供参考。

【讨论】:

  • 我在 ios 11.2.1 上。这没有用。我必须添加 Tapgesturerecognizer
【解决方案2】:

您需要实现手势识别器委托。

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,shouldReceiveTouch touch: UITouch) -> Bool
{
    if ([touch.view isDescendantOfView:yourTableView]) {
        return false
    }
    return true
}

这样它就不会干扰您对表格视图的触摸,仍然允许您选择表格视图。

【讨论】:

    【解决方案3】:

    不鼓励过多使用点击手势。当它覆盖我的自定义按钮时,我遇到了这个问题。我用XCDFormInputAccessoryView for iOS 解决了这个问题。它对我很有效。

    【讨论】:

      【解决方案4】:

      UITapGestureRecognizercancelsTouchesInView 属性设置为true。

      let tapGesture = UITapGestureRecognizer(target: self, action: Selector("hideKeyboard"))
      tapGesture.cancelsTouchesInView = true
      tableView.addGestureRecognizer(tapGesture)
      

      【讨论】:

      • 我实际上是通过相反的方式来实现的,将 cancelsTouchesInView 设置为 false
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多