1 创建UITableView设置相关属性时注册
// xib cell注册
[tableView registerNib:[UINib nibWithNibName:NSStringFromClass([UITableViewCell class]) bundle:nil] forCellReuseIdentifier:NSStringFromClass([UITableViewCell class])];
// 纯代码 cell注册
[tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:NSStringFromClass([UITableViewCell class])];
如果先注册了,那么tableView调用数据源方法tableView:cellForRowAtIndexPath:
时就不用再注册,直接可以使用dequeueReusableCellWithIdentifier:forIndexPath:
就会重用,其实我实验过用dequeueReusableCellWithIdentifier
也是会重用的,但还是建议用前者,因为后者一般配合在tableView:cellForRowAtIndexPath:
方法里面注册使用。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([UITableViewCell class]) forIndexPath:indexPath];
return cell;
}
2 在数据源方法里面注册(适用于未能提前知道Identifier,如从接口获取的Identifier)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([UITableViewCell class])];
// xib的cell注册
if(cell == nil)
{
cell = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([UITableViewCell class]) owner:self options:nil] firstObject];
}
// 纯代码的cell注册
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass([UITableViewCell class])];
}
return cell;
}
3 直接在xib cell里面注册
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([UITableViewCell class]) forIndexPath:indexPath];
NSLog(@"地址-----%p 第%ld行",cell, indexPath.row + 1);
return cell;
}
网友评论