[英]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.