如何处理 UICollectionView 中的背景点击

Posted

技术标签:

【中文标题】如何处理 UICollectionView 中的背景点击【英文标题】:How to handle background tap in UICollectionView 【发布时间】:2014-02-11 06:51:08 【问题描述】:

我的应用中有一个UICollectionView,我想处理它的后台点击来做一些很酷的事情,但我尝试了几种解决方案,但都不是很好。

我尝试过的事情:

UICollectionViewCells 后面添加一个背景视图并处理对其的点击 将UITapGestureRecognizer 添加到UICollectionView 的视图(与collectionView 属性相同)

这两种情况的问题在于,虽然它完美地处理了背景的点击,但它也处理了在UICollectionViewCell 上的点击,所以当用户选择一个项目时,但在这种情况下它不应该因为这两件事在我的应用中有不同的操作。

【问题讨论】:

如果你的collectionView的单元格有UIImageView的子视图那么你需要把imageViewName.userInteractionEnabled = YES;因为默认是NO。 @iPatel 不,它没有,顺便说一句,我的问题恰恰相反,两者都可以处理水龙头。 在您的情况下,单元格的选择(单击)和背景的选择(单击)不同???? @iPatel 是的,整个问题是它们不应该具有相同的效果。 我尝试了第一种方法,它为单元格和背景点击提供了不同的结果。请分享您的代码。 【参考方案1】:

这就是我尝试将手势识别器设置为背景视图的方式。我设法获得了单独的事件。

self.collectionView.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bg"]];
self.collectionView.backgroundView.userInteractionEnabled = YES;

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTap:)];
self.collectionView.backgroundView.gestureRecognizers = @[tapRecognizer];

【讨论】:

这对我也有用,谢谢。我的问题是cancelsTouchesInView 小记:这也适用于简单视图作为背景视图,如self.collectionView.backgroundView = [[UIView alloc] initWithFrame:myFrame];

以上是关于如何处理 UICollectionView 中的背景点击的主要内容,如果未能解决你的问题,请参考以下文章

Flink 如何处理背压

tvOS:如何处理 TabBar 和 UICollectionView 之间的焦点更改并防止崩溃

嵌套 UICollectionViews - 我应该如何处理来自核心数据的数据?

UITableView 里面的 UICollecionView。如何处理选择?

UITableViewCell 中的 UICollectionView?

UITableViewCell 中的 UICollectionView 重用