如何在 UICollectionView 中启用选择的视觉反馈
Posted
技术标签:
【中文标题】如何在 UICollectionView 中启用选择的视觉反馈【英文标题】:How to enable visual feedback of selection in UICollectionView 【发布时间】:2014-02-27 20:50:10 【问题描述】:我正在制作我的第一个 UICollectionView。布局进展顺利。我有带有标签的甘特图条。我在UICollectionView
上设置了allowsSection = YES
。如果我添加委托方法,例如:
- (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath
NSLog(@"collectionView:shouldSelectItemAtIndexPath: %@", indexPath);
return YES;
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
NSLog(@"collectionView:didSelectItemAtIndexPath: %@", indexPath);
- (void)collectionView:(UICollectionView *)collectionView didHighlightItemAtIndexPath:(NSIndexPath *)indexPath
NSLog(@"collectionView:didHighlightItemAtIndexPath: %@", indexPath);
我看到选择似乎在某种程度上发生。但是没有选择的视觉反馈。我确实有一个自定义的UICollectionViewCell
子类,我在它的contentView
中添加了一个CAShapeLayer
。由于 Apple 的文档,我特别避免弄乱子类自己的层:
要配置单元格的外观,请将显示数据项内容所需的视图作为子视图添加到 contentView 属性中的视图。不要直接将子视图添加到单元格本身。单元管理多层内容,内容视图只是其中的一层。除了内容视图之外,单元格还管理两个背景视图,这些视图以选中和未选中状态显示单元格。
这让我相信我应该免费获得视觉选择反馈。我确保我的CAShapeLayer
没有覆盖单元格布局的整个区域。这是一个矩形插图。
那么我错过了什么?
【问题讨论】:
当您移除 CAShapedLayer 时,单元格是否突出显示? 您是否尝试设置单元格 selectedBackgroundView 属性? @Ladislav 不,我认为它是自动的。我的意思是,文档没有说我必须,所以我认为存在一些默认值,并且仅当我想自定义它时才设置该属性。不是这样吗?如果不是...请让您的评论成为答案,以便我给予信任。 是的,就是这样。既觉得自己像个白痴,又觉得他们从不指出“我们会让这一切都为你工作,但不是那样”。 是的,我认为集合视图的行为方式与表格视图不同,其中单元格选择由操作系统自动完成,您必须明确阻止它显示选定状态。很高兴我能帮忙:) 【参考方案1】:尝试设置单元格的 selectedBackgroundView 属性。
【讨论】:
我应该补充一点,毕竟说了又做了,我选择在我的子类中覆盖setHighlighted:
和setSelected:
并使用这些钩子来使用图层的阴影属性来显示一个选择环。以上是关于如何在 UICollectionView 中启用选择的视觉反馈的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式启用/禁用 UICollectionView 中的部分标题?
UI COLLECTION VIEW - 如何在 UICollectionView 上设置附件类型复选标记/披露者