【发布时间】:2015-04-02 14:21:17
【问题描述】:
我有自定义 UICollectionViewController、UICollectionViewFlowLayout 和 UICollectionViewCell 类。在我的布局中,我将每个部分都堆叠起来类似于 http://skeuo.com/uicollectionview-custom-layout-tutorial 。
目前,当我运行应用程序时,所有数据都正确显示。
我正在尝试在我的控制器中实现didSelectItemAtIndexPath,以根据点击的项目启动序列。然而,委托方法永远不会被调用。在我的自定义单元类中,我添加了一个确实被调用的touchesEnded 方法,但我无法弄清楚为什么我的视图控制器类中的委托没有触发。
在我的UICollectionViewController 类下,我指定了协议<UICollectionViewDelegate, UICollectionViewDataSource>。在viewDidLoad我也指定了:
self.collectionView.delegate = self;
self.collectionView.dataSource = self;
作为旁注,但我认为这是一个相关的问题 - 在 Storyboard 中,我有我的原型单元格。它的类类型设置为我的自定义类,我设置了ReuseIdentifier。在我的视图控制器中,我加载了我的自定义单元类并使用相同的ReuseIdentifier。然而,StoryBoard 和 Cell 类之间存在脱节。我可以对故事板原型单元进行更改,它们不会反映在运行时发生的事情中。相反,我必须注释掉这一行:
[self.collectionView registerClass:[NSideCollectionViewCell class] forCellWithReuseIdentifier:NSIDE_CELL_IDENTIFIER];
强制它使用我的故事板单元版本。但是当我这样做时,我的单元类中的initWithFrame 自定义初始化代码永远不会被调用。我不确定为什么会这样,因为 Storyboard 清楚地显示我的原型单元格具有正确的类类型。
【问题讨论】:
-
您的自定义单元格是什么样的?您是否有类似 UITextView 的东西覆盖了可能会拦截触摸的大部分单元格?
-
你的自定义类中有
[super touchesEnded:touches]吗?
标签: ios objective-c iphone uicollectionview uicollectionviewcell