【问题标题】:iOS Subclass UICollectionViewCell custom init methodiOS 子类 UICollectionViewCell 自定义 init 方法
【发布时间】:2012-12-22 01:03:21
【问题描述】:

我正在实现一个自定义 UICollectionViewCell,我想知道如何将模型数据发送给它,以便可以使用数据来初始化单元格的子视图。

我通过这样做来注册我的 MyCollectionViewCell..

[self.collectionView registerClass:[MyCollectionViewCell class] forCellWithReuseIdentifier:@"MyCell"];

在下面的方法中,我做到了……

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {

MyCollectionViewCell* cell = [self.collectionView dequeueReusableCellWithReuseIdentifier:@"MyCell" forIndexPath:indexPath];

我面临的问题是,当一个单元格不在重用队列中时,它会通过调用 initWithFrame 方法来初始化一个新单元格(文档确认应该这样做)。但是,我的 MyCollectionViewCell 类中有一个自定义的 init 方法,它是......

-(id) initWithFrame:(CGRect)frame withData: (NSDictionary*) data;

我希望改为调用我的自定义初始化方法。我该怎么做?我没有使用任何笔尖,而是以编程方式进行所有操作。

如果没有办法,我必须改用 initWithFrame 方法,我还能如何将模型数据传递给 MyCollectionViewCell 以便我可以使用该数据初始化子视图?

谢谢!

【问题讨论】:

    标签: iphone ios uicollectionview uicollectionviewcell


    【解决方案1】:

    [cell initData:data] 在你出队之后怎么样?无论如何,您可能需要重新初始化出队单元格上的数据。

    【讨论】:

    • 这个。如果你重用一个单元格,你不会向它传递 initWith... 任何东西,因此设置数据应该与 init 方法分开。
    • 除了,别叫它initData。称它为 configureForData 或 setData (如果数据是一个属性)的东西。 init... 方法只能在新分配的对象上调用。
    • 这是有道理的。在我调用 setData 并传入我的模型数据后,如何触发单元格重新加载它的 UI?我是否调用 setNeedsLayout 并在我的自定义单元格中有一个 -(void) layoutSubviews 方法?
    • 除非您动态更改视图的大小,否则您不需要/不想再次对其进行布局。不要忘记,此时单元格是不可见的。您需要做的所有事情(例如)就是在标签上设置文本,并使用新数据。
    【解决方案2】:

    另一种选择是为您的 layoutAttributes 对象提供指向数据的指针,并让单元格在其 applyLayoutAttributes: 方法中从那里抓取它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-15
      • 1970-01-01
      • 2015-12-26
      • 1970-01-01
      • 2013-11-23
      • 2018-06-03
      相关资源
      最近更新 更多