使用附加控件注释 UICollectionView 选择的设计

Posted

技术标签:

【中文标题】使用附加控件注释 UICollectionView 选择的设计【英文标题】:Design for annotating UICollectionView selections with additional controls 【发布时间】:2014-03-13 17:32:43 【问题描述】:

使用UICollectionView 和 *** 上提供的出色帮助,我已经能够为我的 iPhone 构建一个“甘特图”样式的控件:

除了化妆品(我现在正在做功能,我有一个图形设计师可以随时查看颜色等等)。

撇开背景不谈,使用自定义 UICollectionViewLayout 子类来处理跨度相对简单。每个跨度都是一个item

但我需要添加一些功能,但不确定如何继续。我想去的地方大致如下:

撇开粗略的化妆品不谈,关键是我想用附加信息“注释”当前选择的跨度(我保证会找人帮我看起来漂亮)。我希望它们处于活动状态,我不确定它是否会调出编辑控件或拖动,但我希望能够识别数字或粗线上的手势并用它们做事,与触摸不同驱动选择的跨度。

我能想到(至少)3 种方法来尝试和实现它:

    使用补充视图。导致选择invalidateLayout,在我的prepareLayout中检测选中状态,并为两个锚点生成额外的布局属性。实现UICollectionReusableView 的子类,它进行绘图,并添加可触摸的子视图(或它自己的手势识别器)。这感觉……不对。我的想法是补充视图更多地用于页眉和页脚,而不是随着选择状态的变化来来去去的控件。但也许这是对设施的适当扩展?

    使用我当前 SpanCell 类(UICollectionViewCell 的子类)的backgroundView(或selectedBackgroundView,不确定是否重要)。只要我禁用clipsToBounds,我就可以在span的bounds周围绘制注解。我必须给它一些大局的知识才能找到端点,但这并不太冒犯。我只会显示/隐藏此视图以响应选择更改。这似乎是最好的方法。

    在整个UICollectionView 的主要backgroundView 中执行此操作。如图所示,我已经有了一个专门的backgroundView,它显示了当前时间网格,条形样式。我可以进一步扩展此视图以绘制注释并管理可触摸的子控件以响应选择更改。这会给我最直接的实现,但感觉就像我最终会得到一个大怪物“做太多工作”的背景对象。

那么问题来了,对于那些有更多经验的人,你会走哪条路?它会是上述3个之一吗?还是有什么不同?为什么?

【问题讨论】:

【参考方案1】:

虽然您的问题对 UICollectionView 实现非常技术性,我不太熟悉,但这似乎是容器的工作(在这种情况下,是集合视图)。想象一下,除了所选项目之外,您还需要您的注释来考虑其他项目?例如,避免注释行与另一个项目之间的冲突?

对我来说,选项 3 似乎是最正确的选项。如果你担心一个大类,你可以将它外部化到一个注解控制器类,它应该在注解应该更新时得到通知。

【讨论】:

以上是关于使用附加控件注释 UICollectionView 选择的设计的主要内容,如果未能解决你的问题,请参考以下文章

将附加视图插入从 Xib 加载的 UICollectionView

UICollectionView:页面控件的当前索引路径

附加图像的 UICollectionView 设计流程布局

在 Swift 的标头中使用分段控件更改 UICollectionView 的内容

如何在 UICollectionView 下隐藏刷新控件

使用 UICollectionView reloadData 问题刷新控件