UITableView 展示的内容不确定,不同的cell展示的风格可能完全不一样,就想网易新闻,第一个cell是一种展现样式,第二个cell可能就是另一重展现了,或者类似一些购物App,第一cell是幻灯片,接着肯能是瓷片,后面可能是普通cell,请问这种情况该如何去设计,去组织代码?

解决方案 »

  1.   

    可以在cellForRowAtIndexPath方法中根据不同情况,创建不同类型的cell就可以了,同时heightForRowAtIndexPath方法中同步计算相应cell的高度
      

  2.   

    顶1楼的,在 cellForRowAtIndexPath 生成自己的cell的时候,设置好了 cell 的高度,把这个高度记下来,在 heightForRowAtIndexPath 里面返回,就好了.
      

  3.   

    可以设置tableHeadView
      

  4.   

    简单设计:
    1.就是在cellForRow那个代理方法里,根据条件返回不同的cell. 复用。
    2.heightForRow里面也是一样。
    3.tableview有header view和footerview这两个也可以利用起来。
    复杂设计:有些多,码字太累。
      

  5.   

    回答的挺全面,数据展示返回的json应该有type判断,根据type在cellForRow进行不同的cell复用
      

  6.   

    1.cellForIndexPath 返回 不同的cell, 这个基本的.
    2.问题是如何去绑定数据源,滑动时时,会有循环利用,高度该如何去计算,去缓存?是一次数据源收集的时候计算好了,并缓存好了?还是每次用到了,再去计算,然后缓存高度. 
    3.对于不同分割的cell,该如何去设计?是抽象通用父类,父类封装通用熟悉,方法,子类继承?还是每一个celld单独继承UItableviewcell,
    4.对于数据源cellForIndexPath该如何去设计,根据不同的数据初始化相应的cell,并把对应的数据设置进去,数据设置进去cell后,cell里面的子控件该如何去布局,去展示数据比较好?想了几个方案,最后都都否了,望大神们出谋划策,不甚感激
      

  7.   

    我觉得你可以提取个自定义cell类,然后cell里面是一个view的高度根据内容的高度而来,因为没试过,不知道可否
      

  8.   

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        
    //    根据数据模型不同,从复用队列中取出不同的cell使用
        
        id obj = self.dataArray[indexPath.row];
        
        if ([obj isKindOfClass:[NewsModel1 class]]) {
            
            NewsCell1 *cell = [tableView dequeueReusableCellWithIdentifier:@"cell1"];
            [cell fullCellWithModel1:obj];
            return cell;
        }
        
        else if ([obj isKindOfClass:[NewModel2 class]]){
            
            NewsCell2 *cell = [tableView dequeueReusableCellWithIdentifier:@"cell2"];
            [cell fullCellWithModel2:obj];
            return cell;
        }
        
        else if ([obj isKindOfClass:[NewsModel3 class]]) {
            
            NewsCell3 *cell = [tableView dequeueReusableCellWithIdentifier:@"cell3"];
            [cell fullCellWithModel3:obj];
            return cell;
        }
        
        else {
            return nil;
        }
        
    }
      

  9.   

    自己画cell,自己设高度