zoukankan      html  css  js  c++  java
  • 解决UICollectionViewCell/UITableViewCell因重用机制导致的错乱问题

    解决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/);

  • 相关阅读:
    [swustoj 243] 又是一年CET46
    [转] 解析Qt资源文件使用
    [转] Qt 多线程学习
    USACO全部测试数据
    [HUD 1195] Open the Lock
    Vue-cli+webpack单页模式详解(转)
    关于vs code终端执行webpack命令报错问题(转)
    git使用相关记录
    关于flex布局兼容
    canvas绘画交叉波浪
  • 原文地址:https://www.cnblogs.com/Rong-Shengcom/p/6491805.html
Copyright © 2011-2022 走看看