我有一个UIView A,我在A中添加了一个UICollectionView B作为子视图,所以现在视图A是B的背景视图。此时 didSelectItemAtIndexPath 将被正常调用。但是如果我向View A添加了一个轻击手势识别器,那么<strong> didSelectItemAtIndexPath 就不会被调用。代码很简单,如下所示
UITapGestureRecognizer *tap2 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap2)];
[viewA addGestureRecognizer:tap2];
如何在这种情况下调用 didSelectItemAtIndexPath ?我的预期行为是点击单元格和点击背景方法被正常和单独调用,因为它们具有不同的抽头行为。
答案 0 :(得分:0)
来自Apple的文档:
您应该始终将手势识别器附加到集合视图本身 - 而不是特定的单元格或视图。 UICollectionView类是UIScrollView的后代,因此将手势识别器附加到集合视图不太可能干扰必须跟踪的其他手势。此外,由于集合视图可以访问您的数据源和布局对象,因此您仍然可以访问正确操作单元格和视图所需的所有信息。
我做到了这一点并且效果很好。通常我会在collectionView上调用indexPathForItemAtPoint:
来获取indexPath,然后从cellForItemAtIndexPath
获取单元格。在您的情况下,您可以检查indexPathForItemAtPoint
返回nil(即用户点击单元格之间的区域),然后为此执行代码。您还可以使用UIView
convertRect方法确切地确定触摸它的位置。