Swift 3.0表视图单元格选择长按

时间:2017-05-26 21:11:15

标签: swift uitableview uigesturerecognizer didselectrowatindexpath uilongpressgesturerecogni

我有一个手势识别器可以解开我的键盘,但这会妨碍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)
    }

enter image description here

1 个答案:

答案 0 :(得分:1)

手势识别器会捕捉您的单击,而不会转发到桌面视图。为什么不在选择单元格时使用UITableViewDelegate的didSelectCell函数来关闭键盘?

否则,您可能希望实现UIGestureRecognizerDelegate并适当地处理这种情况。由于您可能不会检查手势识别器触摸是否已经开始或是否已经开始,因此只要您触摸,您的功能就会被持续调用。

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

enter image description here