UITableView didSelectRowAtIndexPath 只能用两根手指识别点击



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

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

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

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

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

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

对于表视图单元格

首先,声明一个变量,我们检查 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的时候了

对于表视图 (UITableViewDataSource)

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

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

但首先,我们需要创建您在单击单元格时要执行的操作函数,对我来说,我想在单击单元格时转到另一个视图控制器。

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

我希望这个解决方案对您有所帮助,也对我有所帮助,加油。

你只需要使用:

tap.cancelsTouchesInView = NO; 

法典:

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

最新更新