1

我有一个手势识别器可以关闭我的键盘,但这会妨碍 tableView didSelectAtRow 因为 tableView 无法识别点击,除非它是长按。当我在模拟器中运行它并轻轻点击 tableViewCell 时,它注册为点击以关闭键盘,而不是点击 tableView。但是,如果我在模拟器中点击并按住一段时间,它会关闭键盘并注册为 tableView 的 didSelectAtRow。这类似于问题UITableView clicked and no cell selected, but long press trigger cell selected,但我不知道如何使用Objective-C。我想知道是否有人对我的问题有解决方法。我在想是否有一种方法可以识别我在 tableView 中点击了,那么gestureRecognizer 将被取消,但我不知道如何继续。

这是我到目前为止所拥有的:

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

在此处输入图像描述

4

1 回答 1

1

您的单击会被手势识别器捕获,并且不会转发到 tableview。为什么不使用 UITableViewDelegate 的 didSelectCell 函数在选择单元格时关闭键盘?

否则,您可能希望实现 UIGestureRecognizerDelegate 并适当地处理这种情况。由于您可能不检查手势识别器 touch 是否已启动或 endet,因此只要您在触摸,您的函数就会不断被调用。

因此,当您期望仅触发长按时,它也会触发。如果您想使用多个手势识别器并且它们不应该一起触发,您可能需要设置其他识别器的要求(失败)。

在此处输入图像描述

于 2017-05-26T21:20:01.750 回答