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注意 【ios拓展35-Cell创建方法】当sb或xib中的identifier与当前不匹配->查找identifier的正确性
ios拓展35-Cell创建方法
文章图片
image.png

    推荐阅读