UITableView didSelectRowAtIndexPath只识别双指点击

时间:2016-06-13 14:54:15

标签: ios iphone swift uitableview

我选择UIAlertController时尝试提示UITableViewCell。我已检查了所有与故事板相关的问题,例如Selection: Single Selection,甚至在tableView.allowsSelection = true的顶部设置了viewDidLoad()。我还检查了使用didDeselect而不是didSelect的问题。

奇怪的是,当我用两根手指同时敲击它时或者当我按下它一段较长的时间(大约2秒然后释放)时,单元格才会选择。这是一个已知的问题吗?

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    print("Tap registered")
}

任何数量的帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

由于这个问题已经存在很长时间了,所以我将把解决方案留给其他遇到此问题的人,因为我使用这种方法并且效果很好。 这是我的代码:

对于tableViewCell

首先,声明一个变量,我们检查null以避免表崩溃

var tapOnCell: (() -> Void)?

然后在awakeFromNib块中,因此我们在此处创建UITapGestureRecognizer进行轻击操作,该手势需要我们在单元格上轻击1次。

    let gesture = UITapGestureRecognizer(target: self, action: #selector(tapOnContenView))
    gesture.numberOfTapsRequired = 1
    contentView.addGestureRecognizer(gesture)

然后创建如下所示的函数

@objc func tapOnContenView() {
    if let tapOnCell = self.tapOnCell {
        tapOnCell()
    }
}

所以我们现在在tableViewCell上结束了,现在该是tableView了

对于tableView(UITableViewDataSource)

我们在tableViewCell上创建并在此处使用的调用函数

cell.tapOnCell = {
        self.tapOnSingleCell(indexPath: indexPath)
    }

但是首先,我们需要为单击单元格时要执行的动作创建函数,对我来说,我想单击单元格时转到另一个viewController。

func tapOnSingleCell(indexPath: IndexPath) {

    let jobDetail: JobDetailViewController = 
JobDetailViewController.newInstance(storyboardName: .jobSearch)
    let job = self.relatedList[indexPath.row]
}

希望此解决方案对您有所帮助,也对我有帮助。

答案 1 :(得分:0)

我遇到了类似的问题,但是看到其他帖子指出存在父视图的UIGesture Recognizer是问题所在。我就是这样做的。手势识别器用于关闭键盘。因此,为了确保它的价值,请确保在UITableView中使用UIGestureRecognizer时要小心。

答案 2 :(得分:0)

您只需要使用:

tap.cancelsTouchesInView = NO; 

代码:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]
                               initWithTarget:self
                               action:@selector(yourFunctionOnTap)];
tap.cancelsTouchesInView = NO;
[self.view addGestureRecognizer:tap];