繁体   English   中英

iOS UICollectionView reloadData将模型错误地映射到ViewCell

[英]iOS UICollectionView reloadData maps model to ViewCell incorrectly

如果NSArray中的模型数据没有更改,并且您在UICollectionView上调用reloadData ,那么单元格是否会出现在不同的位置?

我发现如果我的NSArray包含Obj1,Obj2,Obj3,那么首先, UICollectionView正确将Obj1映射到第一个collectionViewCell ,将UICollectionView正确映射到第二个collectionViewCell ,等等。这是在cellForRowAtIndexPath设置的方式,因为它使用indexPath.row从数组中获取正确的Obj。

但是,当我调用reloadData ,所有对象都映射到错误的UICollectionViewCell(Obj1最终出现在其他地方,例如第二个collectionViewCell ,而Obj2最终出现在第三个collectionViewCell等)。

为什么会这样? 我在文档中找不到原因。


此外,当我的模型数组发生更改时,我遇到了同样的问题。 例如,如果我的NSArray是Obj1,Obj2,Obj3,然后创建了Objs的新实例,并且现在它们的顺序不同,那么NSArray是Obj2,Obj3,Obj1 ...,然后调用reloadData ,面对同样的问题。

Obj2不会按UICollectionViewCell映射到第一个UICollectionViewCell ,而是映射到另一个UICollectionViewCell

有人知道为什么UICollectionViews会发生这种情况吗?

谢谢!

编辑: cellForRowAtIndexPath代码

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
MIAppCell* cell = [self.collectionView dequeueReusableCellWithReuseIdentifier:@"MIAppCell" forIndexPath:indexPath];
// set model data
[cell setAppTitle:[(MIAppDO*)[self.apps objectAtIndex:indexPath.row] getAppTitle]];
return cell;
}

我解决了这个问题。

早些时候,我让一个单元dequeuing并设置了它的新模型数据,但是模型数据没有正确反映在子类UICollectionViewCell

我需要重写代表我的子类UICollectionViewCell的模型数据的属性的setter方法。 在那些覆盖的方法中,我能够更新单元格的适当视图。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM