UICollectionView:补充视图阻止项目选择

Posted

技术标签:

【中文标题】UICollectionView:补充视图阻止项目选择【英文标题】:UICollectionView: supplementary view blocks items selection 【发布时间】:2014-06-25 19:16:04 【问题描述】:

我正在为UICollectionView 实现日历布局。有“事件”单元格和“当前时间”补充视图。根据设计,我在事件上方显示“当前时间”视图。

问题在于,如果用户触摸“当前时间”视图,则无法选择“事件”单元格。

我试图覆盖补充视图的- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 方法并返回nil,它从未调用过。对于此补充视图,userInteractionEnabled 等于 YES

任何想法如何将触摸从补充视图转移到UICollectionView 单元格?

【问题讨论】:

你能发布一些你想要实现的截图吗? 【参考方案1】:

我不完全理解您要实现的目标,也许一些代码会有所帮助,但我的猜测是您想点击标题视图中的某些内容并选择今天的事件?

如果是这样,您需要在补充视图中捕获触摸,可能使用 UIButton。然后你想打电话

[_collectionView selectItemAtIndexPath:myIndexPath animated:YES scrollPosition:position];

如果您说触摸补充视图块会触摸集合视图,我会检查框架,因为您可能在其他东西之上有一些东西而没有意识到。也许尝试将元素的背景设置为红色等,看看是什么。

【讨论】:

【参考方案2】:

我认为最好的方法是优化你的响应者链,看Event Delivery: The Responder Chain

但是,如果您还尝试做一些非常不规则的事情,您总是可以通过一些专用视图明确地处理用户触摸。如果你有用户触摸的坐标,那么使用 UICollectionView 方法来获取受影响单元格的索引路径:

- (NSIndexPath *)indexPathForItemAtPoint:(CGPoint)point

不要忘记使用UIView方法将坐标转换为合适的坐标系:

- (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view

【讨论】:

以上是关于UICollectionView:补充视图阻止项目选择的主要内容,如果未能解决你的问题,请参考以下文章

无法从视图控制器访问 UICollectionView 补充视图?

如何仅刷新/重绘 uicollectionview 中的补充视图?

UICollectionView deleteItemsAtIndexPaths 不能正确地为补充视图设置动画

UICollectionView 的补充视图或装饰视图的 indexpath 是啥?

如何在 UICollectionView 的补充视图中触发刷新

将补充标题视图添加到 UICollectionView 时出错