UITableViewCell的创建方式

第一种

  • 第一步: 在- (void)viewDidLoad {} 方法中
// 纯代码注册:
//  系统的UITableViewCell
[self.tableView registerClass:[UITableViewCell class]  forCellReuseIdentifier:@"cell”];
// [self.tableView registerClass:UITableViewCell.class  forCellReuseIdentifier:@"cell”]; 
 //  自定义的UITableViewCell
[self.tableView registerClass:[OrderBtnTableViewCell class] forCellReuseIdentifier:@"cellId"];
// 设置代理
 self.tableView.delegate = self;
// 设置数据源
 self.tableView.datasource = self;```

- 第二步: 在```- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath``` 方法中
```objc
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
                                                           
 cell.textLabel.text = self.titles[indexPath.row];
    
 return cell;

第二种

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 方法中

    static NSString *identifier = @"identifier";
    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
    
    if (!cell) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
    }
    
    cell.textLabel.text = self.titles[indexPath.row];

    return cell;

注意

  1. 先注册
  2. 再设置代理
  3. 当cell为nil,需要创建新的cell的时候,使用的是initWithStyle:reuseIdentifier:方法,而不是init方法,这样做是因为创建新的cell的时候需要绑定一个identifier,这样在重用的时候才能找到可重用的相同类型。
  4. 一般在if(!cell)中,也就是在新创建cell的时候,将一些只需要初始化一次的属性进行初始化,而不是在这个括号的外面。同样,如果不同的cell需要设置不同属性或数据,那么需要在括号外执行,因为括号外面每次cell出现都会执行到,这样可以保证不用的cell对应不同的属性或数据。

  • 注册class,意思就是告诉tableView,首先去缓存池中找有没有可重用的cell,如果有,则拿过来重用;如果没有,那么根据之前注册的UITableViewCell这个类,来自动生成一个cell,并且给它绑定上重用identifier。

  • 这个方法省去了我们自己手动创建cell,
    但是也有不足:苹果提供给我们的cell的样式,除了默认的,我们都不能用了。

  • 第二种方法更多的时候用在我们自定义Cell。虽然无法使用更多的系统自带样式,但是我们首先可以注册自定义的cell的类,然后仍然首先去缓存池中找有没有可重用cell,如果没有,则根据注册的cell来创建cell并绑定identifier。当然,在使用dequeueReusableCellWithIdentifier:的时候,返回的应该也是自定义的Cell类型。

  • 注册的不仅可以是Class,还可以是nib,也就是说可以注册通过xib创建的cell,和上面的方法同理。

重用机制原理

  • 假如手机屏幕上可以同时显示5个cell(编号为0 - 4),那么当用户向上滑tableView的时候,第6个cell即将出现,而第1个cell还未消失,所以此时会创建6个UITableViewCell。当第7个cell出现,那么第1个cell就会完全从屏幕上消失,此时并不会销毁第一个cell,而是将它放入缓存池中等待复用。此时第7个cell会首先去缓存池中寻找是否有可复用的cell,发现有(就是消失的第1个cell),那么就会拿来复用,而不是重新创建。这样一来,消失一个,下次就会重用这个,这样就可以保证创建最少数量的cell,仍然可以满足需求。

你可能感兴趣的:(UITableViewCell的创建方式)