自定义tableViewcell有两种方式:一是、通过xib方法布局cell,另一种方法是:重写自定义cell中的initWitSytle:(UITableViewCellStyle*)style Reuseableindentifier:(NSString *)identifier ;
第一种自定义cell的使用(使用XIb文件对cell进行布局):
第一步:调用tableView的registerNib:(UiNib *) ForCellReuseableIndentifier:(NSString *)identifier方法向数据源注册cell;
(例子:[_tableView registerNib:[UINib nibWithNibName:@"xxxxxCell" bundle:nil] forCellReuseIdentifier:kCellIdentify]; );
第二步:在cellForRowsAtIndexPath方法中,通过调用tableview的 “dequeueReuseableCellWithIndentifier:ForIndexPath”。(若无重用的cell,将自动使用所提供的nib文件创建cell并返回(若使用旧式dequeueReuseableCellWithIdentifier:方法需要判断返回是否为空而进行新建);
第三步:若获取cell的时候,无可重用的cell则调用自定义tableVIewcell中的 “awakeFormNib”方法,我们可以通过重写这个方法来添加更多页面内容。
第二种自定义cell的使用(通过重写initWithStyle:withReuseableCellIdentifier:方法进行布局 )
第一步:重写自定义cell中的初始化方法,进行cell页面布局。
第二步:调用tableView的registerClass:ForCellReuseableIndentifier方法注册cell
第三步:在cellForRowsAtIndexPath方法中“dequeueReuseableCellWithIndentifier:ForIndexPath”方法从重用池中出列对应标识符的cell。
第四步:如果重用池中没有对应重用标识符的cell 则调用自定义cell中已经重写好的初始化方法来创建我们需要的cell.
自定义cell中一般都会有一个方法,叫“(void)awakeFormNib”的方法,这个方法是在当从一个对象是从XIb中创建的时候就会自动调用的方法,用来唤醒Xib中其他所有的控件。
另外要注意的:
1、dequeueReuseableCellWithIdentifier:与dequeueReuseableCellWithIdentifier:forIndexPath:的区别:
前者不必向tableView注册cell的Identifier,但需要判断获取的cell是否为nil;
后者则必须向table注册cell,可省略判断获取的cell是否为空,因为无可复用cell时runtime将使用注册时提供的资源去新建一个cell并返回
2、自定义cell时,记得将其他内容加到self.contentView 上,而不是直接添加到 cell 本身上
总结:
1.自定义cell时,
若使用nib,使用 registerNib: 注册,dequeue时会调用 cell 的 -(void)awakeFromNib
不使用nib,使用 registerClass: 注册, dequeue时会调用 cell 的 - (id)initWithStyle:withReuseableCellIdentifier:
2.需不需要注册?
使用dequeueReuseableCellWithIdentifier:可不注册,但是必须对获取回来的cell进行判断是否为空,若空则手动创建新的cell;
使用dequeueReuseableCellWithIdentifier:forIndexPath:必须注册,但返回的cell可省略空值判断的步骤。