由于笔者之前半年的时间主要做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的正确性