【发布时间】:2015-01-05 03:43:24
【问题描述】:
想象一个场景,您有一个UICollectionView,并且您希望在每个单元格中都有一个按钮填充整个单元格,以便您可以响应各种触摸事件来处理突出显示的外观。例如,当用户按下按钮时,您想要更改按钮的背景颜色,然后在他们拖出或取消触摸等时将其还原。现在想象一下,您不想更改按钮的背景颜色,而是要更改的情况单元格的backgroundView。 UIButton 没有背景视图,只有 backgroundColor 或 backgroundImage。
我有一个解决方案,但我想知道它是否可以更清洁,如果不推荐这种方法。触摸按钮后,我循环遍历其superviews,直到获得UICollectionViewCell,然后将其selected 属性设置为true。在cellForItemAtIndexPath 中,我根据需要设置了selectedBackgroundView。这样就获得了想要的行为,但是用选中状态来表示高亮状态并以这种方式管理是不是不合适呢?什么会更好?
我可以在触摸按钮时获得UICollectionViewCell,然后更改其backgroundView 属性,而不是在创建每个单元格时这样做,那么就无需更改selected 值。但这仍然不是一个很好的解决方案。
【问题讨论】:
-
使用带有 UILabel 的常规 UICollectionViewCell 而不是 UIButton,然后简单地更改单元格的 contentView 的 backgroundColor 会有什么不同?您的按钮似乎没有做任何特别的事情,请注意集合或表格视图单元格内的按钮延迟其触地动画/突出显示,因为单元格本身首先被检查选择事件。
-
@Matt 确实该按钮并不特殊,它存在的唯一原因是因为
UICollectionViewCell不是UIControl因此您无法检测到 TouchDown、TouchDragEnter、TouchCancel 等,所以没有触摸时改变外观的方法。当它被点击 (didSelectItemAtIndexPath) 但没有被触摸时,你可以。
标签: ios swift uibutton uicollectionview uicollectionviewcell