关于tableview中cell的一些加载

这两天在做tableview时,遇到一些适配的问题,比如下面:

屏幕旋转时,tableview并不能充满屏幕,这种需要加约束,有没有一种方法可以简化呢?答案是使用系统自带的UItableview的类去创建,系统会自带生成一些代理方法,这个时候创建的UItableview是自动布局好的,会适应各种屏幕和旋转。

系统的类不需要写创建UItableview的代码,也不用写代理,系统封装好了,里面有个self.tableview,下面代理的方法也已写好是不是很方便~微笑

创建cell时,可以纯代码手写,在cell文件的.M文件中我是这样写的:

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        
        self.headerView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 10, 80, 80)];
//        self.headerView.backgroundColor = [UIColor yellowColor];
        [self addSubview:self.headerView];
        
       
       //  加入自己定义的空间的frame
        
    }
    return self;
}

下面是纯代码的自适应高度:

[self.headerView  sizeToFit];//自适应


在控制器里面复用就行了:

    CustomViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifer];
    if (cell == nil) {
        cell = [[CustomViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifer];
    }



如果从xib文件中加载呢?

先注册一个NIB:

    [self.tableView registerNib:[UINib nibWithNibName:@"CustomTableViewCell" bundle:nil] forCellReuseIdentifier:string];


就是告诉系统从XIb文件中加载cell,这个方法后内存中就已经有xib的文件了。很好地满足了我们的需求:既从nib加载,又能对cell进行重用。


在复用方法中就省略了很多代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
//    static NSString *string = @"cell";
    CustomTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:string forIndexPath:indexPath];
  
    //   -----------------------------定制cell
 
    return cell;
}

     解释一下:

1.UINib是一个IOS4.0才出现的类,与MAC上的NSNib类作用相似, 就是加速频繁使用的NIB文件的加载。在第一次从硬盘加载NIB时,它在内存中缓存NIB文件对象。之后加载NIB文件时就会从内存拷贝而避免了较慢的硬盘访问。Apple宣称可以在 加载NIB文件时提供 2倍的速度提升 使用UINib的最明显的地方就是在需要在每次创建新Cell时从NIB文件中加载Cell的UITableViewControllers中。UINib的优势就是在不用大量修改代码的情况获得性能改进。其实简单地说,就是利用缓存机制避免了频繁从硬盘中加载XIB文件,这在大数据量的时候显得尤为有用。

2.除了上述代码,还需要在xib文件中做如下设置:在Cell.xib的Inspector窗口中将Identifier进行设置,这里的Identifier要与cellForRowAtIndexPath中一致。

  其中第二条我看很多都没加,目前不清楚需不需要~记录一下,留待考究~




你可能感兴趣的:(UITableView,cell)