UICollectionView 单元格和按钮
Posted
技术标签:
【中文标题】UICollectionView 单元格和按钮【英文标题】:UICollectionViewCells and Buttons 【发布时间】:2013-06-18 11:21:07 【问题描述】:我一直试图让我的UICollectionView
对单击和双击做出不同的反应,但我发现的所有答案似乎都表明这并不可行,因为首先识别出单击。它适用于非常慢的点击,但任何更快的东西总是会启动默认手势识别器(如果有人让它工作,我很想知道)......
所以无论如何,我现在已经将按钮放在我的 UICollectionViewCell
(它有自己的类和 NIB 文件)中。
问题是这样的:
在collectionView 的UIViewController
中使用按钮的最佳方式是什么?
我目前在UICollectionViewCell
的子类的标头中有一个protocol,并已将我的viewController 声明为delegate 并实现了所需的协议功能。
在collectionView:cellForItemAtIndexPath:
中,我将 VC 设置为单元格的委托。
一切正常,但似乎有点啰嗦,而且可能不是一个好方法。
我想到的另一种方法是不使用委托来简单地调用 UICollectionViewCell
中 collectionView:cellForItemAtIndexPath:
的属性上的 addTarget:Action:
。
这似乎更简单,但委托模式在我看来更合适。
欢迎任何和所有关于哪个更好、为什么以及任何更合适的替代方案的建议!
谢谢。
【问题讨论】:
【参考方案1】:您使用委托模式的想法是正确的。视图的任何操作的最终责任对象是显示这些视图的视图控制器。因此,将它用作您单元格协议的委托是正确的。
【讨论】:
詹卢卡,谢谢。我在这种方法和只是将操作添加到“collectionView:cellForItemAtIndexPath:”中的按钮之间纠结。有什么想法会更好……或者为什么? 您可以将按钮的操作放在 viewController 的代码中,但那将是糟糕的面向对象代码。您的 viewController 不需要知道动作是如何触发的:它可能是一个按钮、一个手势识别器、一个从其他对象对单元格本身的 API 调用。没关系。您的 viewController 应该只关心处理单元告诉他已经发生的操作。因此,这只是一种很好的 OOP 实践,可以让您的代码更可重用。 谢谢,你这么说就很明显了。【参考方案2】:创建UICollectionViewCell
的自定义子视图并将您的按钮放在initWithFrame
方法中。将按钮声明为公开,以便稍后在您的uicollectionviewcontroller
或uicollectionview
中使用它(如果以编程方式创建)。
【讨论】:
Meenakshi,感谢您的快速回答,但这对我来说没有意义......并不意味着你错了,我只是不明白。以上是关于UICollectionView 单元格和按钮的主要内容,如果未能解决你的问题,请参考以下文章