未调用UICollectionView委托

时间:2015-04-02 14:21:17

标签: ios objective-c iphone uicollectionview uicollectionviewcell

我有自定义UICollectionViewControllerUICollectionViewFlowLayoutUICollectionViewCell类。在我的布局中,我将每个部分与http://skeuo.com/uicollectionview-custom-layout-tutorial类似。

目前,当我运行应用程序时,所有数据都会正确显示。

我正在尝试在我的控制器中实现didSelectItemAtIndexPath,以根据被点击的项目启动序列。但是委托方法永远不会被调用。在我的自定义单元格类中,我添加了一个被调用的touchesEnded方法,但我无法弄清楚为什么我的视图控制器类中的委托没有触发。

在我的UICollectionViewController课程中,我指定了协议<UICollectionViewDelegate, UICollectionViewDataSource>。在viewDidLoad我还指定了:

self.collectionView.delegate = self;
self.collectionView.dataSource = self;

作为旁注,但我认为这是一个相关的问题 - 在故事板中我有我的原型单元格。它的类类型设置为我的自定义类,我设置了ReuseIdentifier。在我的视图控制器中,我加载了自定义单元格类并使用相同的ReuseIdentifier。但是,StoryBoard和Cell类之间存在脱节。我可以对故事板原型单元格进行更改,但它们不会反映在运行时发生的情况。相反,我必须注释掉这一行:

[self.collectionView registerClass:[NSideCollectionViewCell class] forCellWithReuseIdentifier:NSIDE_CELL_IDENTIFIER];

强制它使用我的故事板单元格版本。但是当我这样做时,我的单元类中的initWithFrame自定义初始化代码永远不会被调用。我不确定为什么会这样,因为Storyboard清楚地显示我的原型单元格具有正确的类类型。

1 个答案:

答案 0 :(得分:1)

回答了我自己的问题 - 在storyboard中创建的项目调用initWithCoder而不是initWithFrame。注释掉显式的自定义单元类注册允许视图控制器遵循故事板中设置的内容,一切都按预期工作。