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 是啥?