如何在 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 上设置附件类型复选标记/披露者

SwiftUI:如何在用户滑动时实现分页? (之前使用的 UICollectionView -> 启用分页)

滚动到 UICollectionView 中启用分页的页面

如何使 UICollectionView 单元格可移动?

UICollectionView 多选复用问题