注册cell
是NIB创建的cell用registerNib方法:
dequeue时会调用 cell 的 -(void)awakeFromNib:方法
- (void)registerNib:(nullable UINib *)nib forCellReuseIdentifier:(NSString *)identifier NS_AVAILABLE_IOS(5_0);
不是NIB创建的cell用registerClass方法:
dequeue时会调用 cell 的-(id)initWithStyle:withReuseableCellIdentifier:方法
- (void)registerClass:(nullable Class)cellClass forCellReuseIdentifier:(NSString *)identifier NS_AVAILABLE_IOS(6_0);
cell复用
这个方法返回的cell可能为空,所以使用的时候需要判断cell是否为空,若为空则新建一个cell,该方法不需要注册cell!!!
- (nullable __kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier;
// Used by the delegate to acquire an already allocated cell, in lieu of allocating a new one.
这个方法在iOS6之后才有,获取重用的cell,若无重用的cell,将自动使用所提供的类创建cell并返回,使用该方法需要使用对应的注册cell的方法!!!
- (__kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(6_0);
// newer dequeue method guarantees a cell is returned and resized properly, assuming identifier is registered
这里是例子:
例子一:是NIB创建的cell
[self.mTableView registerNib:[UINib nibWithNibName:@"TestTableViewCell" bundle:nil] forCellReuseIdentifier:kCellIdentifier];
- cellForRowAtIndexPath方法里的代码:
TestTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellIdentifier forIndexPath:indexPath];
例子二:不是NIB创建的cell
[self.mTableView registerClass:[TestTableViewCell class] forCellReuseIdentifier:kCellIdentifier];
- cellForRowAtIndexPath方法里的代码:
TestTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellIdentifier forIndexPath:indexPath];
例子三:
- cellForRowAtIndexPath方法里的代码:
static NSString *cellIdentifier = @"reuseTestTableViewCell";
if (cell == nil)
{
cell = [[TestTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}