ios拓展35-Cell创建方法

由于笔者之前半年的时间主要做bug定位修复,以及数据加密代码混淆一类的安全类工作.有相当长一段时间没有用tableView了.突然有个需求用到了,竟然忘了UITableViewCell的创建与区别.所以今天总结一下.

总共有4种方法

1.方法一,最简单的初始化
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cee"];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cee"];
    }
    cell.textLabel.text = @"aa";
    return cell;
}
2.方法二,使用xib创建
//xib创建
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
    if (cell == nil) {
        cell = [[NSBundle mainBundle] loadNibNamed:@"Cell" owner:nil options:nil].lastObject;
    }
    return cell;
}
3.方法三,注册cell类
//不用做cell==nil判断
- (void)viewDidLoad {
    [super viewDidLoad];
    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"aa"];
    // Do any additional setup after loading the view from its nib.
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"aa" forIndexPath:indexPath];
    return cell;
}
4.方法四,注册xib
//不用做cell==nil判断;xib创建
- (void)viewDidLoad {
    [super viewDidLoad];
    [self.tableView registerNib:[UINib nibWithNibName:@"aa" bundle:nil] forCellReuseIdentifier:@"aa"];
    // Do any additional setup after loading the view from its nib.
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"aa" forIndexPath:indexPath];
    return cell;
}
5.register的作用
使用dequeueReusableCellWithIdentifier: forIndexPath: 必须使用配套的
- (void)registerNib:(UINib *)nib forCellReuseIdentifier:(NSString *)identifier
或者
- (void)registerClass:(Class)cellClass forCellReuseIdentifier:(NSString *)identifier这个方法。对每一个tableview的cell进行注册。
//但是 注册cell    不方便设置cell的Style
6.dequeueReusableCellWithIdentifier: forIndexPath:区别

带indexPath的方法总是返回一个cell(也就是说不可能为空),另一个方法是有可能为nil的;
即:在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath方法中可以省略以下代码:

if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
7.使用xib注意

当sb或xib中的identifier与当前不匹配->查找identifier的正确性

ios拓展35-Cell创建方法_第1张图片
image.png

你可能感兴趣的:(ios拓展35-Cell创建方法)