美文网首页iOS学习开发iOS程序猿iOS收藏
一个Xib里面创建两种不同的cell及一些关于tableview

一个Xib里面创建两种不同的cell及一些关于tableview

作者: Jinkuro | 来源:发表于2016-09-13 10:02 被阅读361次

    1.UITableView的复用机制

    首先我们看苹果所给出的优化方案:

    TableViewCell有一个缓存池机制,如果cell完全移出了视线外(即屏幕之外),则将这个cell存放到缓存池之中,等待复用;

    为了区别每一种不同的cell,将每种不同的cell绑定上一个identifier,在显示新的cell的时候,delegate会通过identifier决定出现哪种cell;

    UITableView每当显示一个新的cell的时候,都会去调用其Delegate的方法

        - (UItableViewCell *)tableView:(UITableView *)tableView
        cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        }
    

    方式一:

    通常的做法是,从缓存池里面寻找,是否有可以循环利用的cell?

        UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
    

    如果没有,就重新创建一个新的cell,这个cell在创建的时候,需要绑定一个identifier;

        if (cell == nil) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
                }
    

    注意这个identifier,由于这个返回cell的方法调用非常频繁,最好将其用一个静态变量存放起来,避免重复开辟内存;

    (被static修饰的局部变量只会初始化一次,在整个程序的运行中只有一份内存)

        static NSString *identifier = @"cell";
    

    方式二:

    如果没有cell,也可以在viewDidLoad的时候,进行注册,告诉TableView:将要用到cell的时候,就创建这个类型及这个标识的cell;

    可以注册class或者Nib的cell;

        [self.newsTableView registerNib:[UINib nibWithNibName:@"JMTableViewCell" bundle:nil] forCellReuseIdentifier:@"cell"];
    

    2.一个Xib里面创建两种不同的cell,然后在一个tableView里面使用

    这个方法比较特殊,在自建的TableViewCell的Xib里面,可以拖入多个cell,cell的顺序要看左边栏的顺序,即最上面的是0,下面一个是1,等等;

    如图

    idenAndCell.png

    在这个方法中,不采用注册的方法,只需在返回cell的方法中进行标识区分即可;

    这样做可以有效地减少工作量,避免新建另一个Xib,而数据又和别的Xib的数据一样;这种重复劳动显然是不必要的

        - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
            //model对应数据源的数组顺序
            JMNewsModel *model = [[JMNewsModel alloc]init];
            model = self.dataArray[indexPath.row];
            //创建cell
            JMNewsTableViewCell *cell = [[JMNewsTableViewCell alloc]init];
            //根据img_type来确定是哪种cell
            //复用和创建都嵌入if内部
            if (model.img_type == 2) {
                cell = [tableView dequeueReusableCellWithIdentifier:@"iden"];
                if (!cell) {
                    cell = [[[NSBundle mainBundle]loadNibNamed:@"JMNewsTableViewCell" owner:nil options:nil]objectAtIndex:1];
                }
            }else if (model.img_type == 0) {
                cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
                if (!cell) {
                    cell = [[[NSBundle mainBundle]loadNibNamed:@"JMNewsTableViewCell" owner:nil options:nil]objectAtIndex:0];
                }
            }
            //cell的数据赋值
            cell.model = model;
            return cell;
        }
    

    相关文章

      网友评论

        本文标题:一个Xib里面创建两种不同的cell及一些关于tableview

        本文链接:https://www.haomeiwen.com/subject/hjdmettx.html