Swift 3.0 TapGesture摆脱键盘而不干扰表视图

时间:2017-05-26 02:59:11

标签: swift tableview uitapgesturerecognizer

我查看过以前有关摆脱键盘而不干扰表格视图的问题,并找到了以下代码:

override func viewDidLoad() {
    super.viewDidLoad()

    searchBar.delegate = self


    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(AddressVC.hideKeyboard))
    tapGesture.cancelsTouchesInView = false
    //searchResultsTableView.addGestureRecognizer(tapGesture)
    self.view.addGestureRecognizer(tapGesture)

}
func hideKeyboard()
    {
    self.view.endEditing(true)
    }

似乎当我在模拟器中运行时,当我轻轻点击tableViewCell时,它会注册为点按键以关闭键盘而不是点击tableView。但是,如果我在模拟器中点按并保持一段时间,它将关闭键盘并注册为tableView的didSelectAtRow。我想知道是否有代码可以处理这个问题(或类似的代码,可以做同样的事情),或者这根本不是问题,模拟器不如实际手机敏感。 (我现在无法设置我的实际手机进行测试。)

1 个答案:

答案 0 :(得分:1)

didSelectRow被点击并按住而不是点按手势识别器的原因是因为它被视为长按手势,并且由于没有定义长按手势识别器,因此触摸被转移到查看下面。因此,可能的解决方案是添加tapGesture识别器和长按手势识别器,并在两个选择器上调用**self.view.endEditing(true)**。但请确保在此之后删除手势识别器,以便之后启用与tableView的交互。

@IBAction func tappedOutside(_ sender: UITapGestureRecognizer) {
    self.view.endEditing(true)
    self.view.removeGestureRecognizer(sender)
}

@IBAction func longPressOutside(_ sender: UILongPressGestureRecognizer) {
    self.view.endEditing(true)
    self.view.removeGestureRecognizer(sender)
}