我有UICollectionView
支持水平和垂直滚动。每个集合视图单元格都是UICollectionViewCell
的子类,它们是从包含UIButton
,UITableView
甚至另一个UICollectionView
的NIB加载的。它们都在TPKeyboardAvoidingScrollView
内。
滚动可以在水平和垂直方向上完美地工作,但它不会在单个UICollectionViewCell
上的元素上接收触摸事件。当我触摸任何元素时,说一个属于UICollectionViewCell
的按钮,那么我得到的就是didSelectItemAtIndexPath
上的UICollectionViewDelegate
事件 - 我无法获得任何触摸事件传递到点击发生在集合视图单元格的其中一个子视图上。
答案 0 :(得分:20)
在浏览了一些其他stackoverflow文章之后,我最终发现了导致我问题的原因 - 我用来初始化UICollectionViewCell的XIB文件在根目录下有一个普通的UIView元素;即使它被标记为UICollectionViewCell的子类并且以任何其他方式表现良好,也会阻止事件流过。
所以 - 如果您的自定义UICollectionViewCell XIB文件在根目录中看起来像这样(请参阅数据输入矩阵视图旁边的图标,这是我的UICollectionViewCell子类的名称),那么您将遇到同样的问题:< / p>
我的解决方案是向XIB添加一个正确的UICollectionViewCell类,然后将现有数据输入矩阵视图下的所有子视图移动到其中,删除旧的根,然后重新连接Outlets。最终结果如下:
您可以看到使用的不同图标 - 这就是您想要的。一旦我像这样改变我的XIB,事件就会通过。
在原始XIB文件(视图为Source)中,非工作版本将根元素引入为
<view ...>
而工作版本将根元素更改为
<collectionViewCell ...>
希望这可以节省其他人几个小时......
答案 1 :(得分:0)
在我的自定义UICollectionViewCell
中对UIButton有同样的问题将此功能添加到我的UICollectionViewCell
解决了我的问题:
- (void)setBounds:(CGRect)bounds {
[super setBounds:bounds];
self.contentView.frame = bounds;
}
答案 2 :(得分:0)
如果您在根目录中有一个视图/ scrollView,它附加到 backgroundView 或 selectedBackGroundView ,请将其删除,它将正常工作。