【问题标题】:UICollectionView's didSelectItemAtIndexPath only called when selecting cell with two fingersUICollectionView 的 didSelectItemAtIndexPath 仅在用两根手指选择单元格时调用
【发布时间】:2017-04-11 11:04:45
【问题描述】:

我正在使用通过单击手势识别器添加到视图顶部的 UICollectionView。 CollectionView 使用没有任何子视图的自定义单元格。委托的方法

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath

仅在用两根手指而不是一根手指选择单元格或用一根手指长按时调用。

我没有意外覆盖

- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath.

我通读了所有类似的问题,这些问题都通过移除某种视图或手势识别器来解决。

有什么想法吗?

【问题讨论】:

  • 我感觉有点水石,你能分享一个简单的项目吗?
  • 请发布您的选择
  • 你试过没有didDeselectItemAtIndexPath 吗?
  • self.collectionView.allowsMultipleSelection = false 试试这个
  • 此链接可能有帮助:stackoverflow.com/questions/16444688/…

标签: ios objective-c


【解决方案1】:

解决方案:将集合视图添加到包含单击手势识别器的视图之上。这在某种程度上是如何导致这种行为的。我从集合视图父视图中删除了识别器,它可以工作。

请随意解释为什么这是预期的行为。我会争辩说,最顶层的视图 (CollectionView) 在将触摸传递给后面的视图之前处理它们。

【讨论】:

  • +1,这解决了我的问题。我也很好奇为什么集合视图触摸事件在传递给点击手势识别器之前没有得到处理......
  • 这正是我的问题
【解决方案2】:

完全移除手势的另一种方法是设置它,使其不会取消视图中的触摸。

UITapGestureRecognizer* tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(someSelector)];
tapRecognizer.cancelsTouchesInView = NO;
tapRecognizer.delaysTouchesBegan = NO;
tapRecognizer.delaysTouchesEnded = NO;
[self.view addGestureRecognizer:tapRecognizer];

【讨论】:

    【解决方案3】:

    基于Christoph解决方案;我想出了这段代码,它正在删除我父视图中的所有手势识别器。

    for (UIGestureRecognizer *recognizer in self.view.gestureRecognizers) {
        [self.view removeGestureRecognizer:recognizer];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多