解决UICollectionViewCell/UITableViewCell因重用机制导致的错乱问题
UICollectionView和UITableView在开中用的很多,可以解决很多复杂的布局问题,在设计列表式的页面布局时用到的更多,但有时因为设置不当会出现cell的内容错乱的问题。
就拿我遇到的问题举例:
情景一:
在显示以及选择商品的属性时(商品的属性属于分类属性)每滑动一次页面显示属性的cell位置就会错乱,选择时就会出现选择的index对数组溢出;
情景二:
在某个功能情境下需要展示商城商品品牌并且进行多选,选中的和未选中的要有状态区分,但每次选择后滑动液面就会出现已选择的和页面上的状态不对应出现了错乱的状态。
具体的解决方法:
1.先定义一个可变的的dictionary(NSMutableDictionary)
- (UICollectionViewCell *)collectionView:(UICollectionView*)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
NSString *identifier = [_cellIdentifierDic objectForKey:[NSString stringWithFormat:@"%@", indexPath]];
if(identifier == nil){
identifier = [NSString stringWithFormat:@"selectedBtn%@", [NSString stringWithFormat:@"%@", indexPath]];
[_cellIdentifierDic setObject:identifier forKey:[NSString stringWithFormat:@"%@",indexPath]];
// 注册Cell(把对cell的注册写在此处)
[_collectionView registerClass:[SelectedBtnCell class] forCellWithReuseIdentifier:identifier];
}
SelectedBtnCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
if(!cell){
cell = [[[NSBundle mainBundle]loadNibNamed:@"SelectedBtnCell" owner:self options:nil]lastObject];
}
//商品规格信息逻辑
}
注:在使用UITableViewCell时同样可以用这样的方法来解决再次不再具体说明:
这样就可以解决上面出现的问题,其实原理也很容易理解如果有更先进的解决方法欢迎来访(http://www.cnblogs.com/Rong-Shengcom/); |