【发布时间】:2012-09-29 08:22:59
【问题描述】:
我想响应在 UICollectionView 中双击单元格,并通过双击操作取消单元格选择。
这是我尝试过的:
UITapGestureRecognizer *tapRecogniser = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGesture:)];
tapRecogniser.numberOfTapsRequired = 2;
for (UITapGestureRecognizer *recogniser in [self.collectionView gestureRecognizers]) {
[recogniser requireGestureRecognizerToFail:tapRecogniser];
}
[self.collectionView addGestureRecognizer:tapRecogniser];
也就是说,如果我的双击手势识别器成功,我会尝试让默认手势识别器失败。
这似乎不起作用,因为我的集合视图委托的 collectionView:didSelectItemAtIndexPath: 在双击后仍然被调用
Apple 的 UICollectionViewController 文档注意事项
Apple's documentation 在这一点上具有误导性,声称默认手势识别器是 UITapGestureRecognizer 子类的一个实例,因此可以使用[recogniser isKindOfClass:[UITapGestureRecognizer class]] 轻松识别。不幸的是,这是一个错误。
【问题讨论】:
-
在我的收藏视图中添加点击识别器时,我没有看到任何冲突——它可以很好地响应双击(它也响应收藏视图的单击识别器)。
-
UICollectionViewDelegate 协议的 collectionView:didSelectItemAtIndexPath: 回调不起作用(在我的测试中)添加了点击识别器。
-
@rdelmar:感谢您的测试。它现在也适用于我(不确定我最初的测试中发生了什么)。因此,我大大改变了问题。
标签: ios objective-c uicollectionview uikit uitapgesturerecognizer