【问题标题】:UICollectionView delegate not being called未调用 UICollectionView 委托
【发布时间】:2015-04-02 14:21:17
【问题描述】:

我有自定义 UICollectionViewControllerUICollectionViewFlowLayoutUICollectionViewCell 类。在我的布局中,我将每个部分都堆叠起来类似于 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


【解决方案1】:

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

【讨论】:

  • 也可以使用方法“awakeFromNib”
猜你喜欢
  • 1970-01-01
  • 2012-12-31
  • 2012-09-22
  • 2018-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-06
  • 2014-03-18
相关资源
最近更新 更多