【问题标题】:UITableView didSelectRowAtIndexPath only recognize taps with two fingersUITableView didSelectRowAtIndexPath 只识别两根手指的点击
【发布时间】:2016-06-13 14:54:14
【问题描述】:

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

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

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

我们将不胜感激任何帮助。

【问题讨论】:

  • 您可以向我们展示更多相关代码吗?您实现的任何点击手势?
  • 你在使用手势识别器吗?
  • 这个特定的视图控制器没有实现任何手势识别器。
  • 我也遇到了这种情况。很奇怪。
  • 关于这个问题的任何更新?

标签: ios iphone swift uitableview


【解决方案1】:

我遇到了类似的问题,但看到其他帖子指出附加到父视图的 UIGesture 识别器是问题所在。我就是这么做的。手势识别器用于关闭键盘。因此,在 UITableView 中使用 UIGestureRecognizer 时务必小心谨慎。

【讨论】:

    【解决方案2】:

    由于这个问题很久了,所以我会把我的解决方案留给其他面临这个问题的人,因为我使用这种方法并且效果很好。 这是我的代码:

    对于 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]
    }
    

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

    【讨论】:

      【解决方案3】:

      你只需要使用:

      tap.cancelsTouchesInView = NO; 
      

      代码:

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

      【讨论】:

        猜你喜欢
        • 2016-04-22
        • 2016-04-28
        • 2011-11-17
        • 2012-09-18
        • 1970-01-01
        • 1970-01-01
        • 2021-09-27
        • 2012-02-24
        • 1970-01-01
        相关资源
        最近更新 更多