0

现在我们必须在 ViewDidLoad 的某个地方使用这个代码 -

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:CellIdentifier];

我不确定旧方法有什么问题,方法是检查单元格是否实际上是由旧方法中的队列返回的

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

让我感到困惑的是,为什么在不相关的地方使用一些任意的方法调用,而这个“注册”方法到底有什么作用?

4

1 回答 1

2

自从在 iOS 5 中,Apple 引入了一种从 NIB 文件中实例化单元格的快捷方法,该方法具有三个阶段:

  1. 声明单元标识符的属性
  2. 注册包含单元格的 NIB 对象,并将其与单元格标识符相关联
  3. 创建单元格本身(然后像往常一样自定义控件)

注册 NIB 对象只需要在控制器的生命周期中发生一次,因此放置代码的明显位置是viewDidLoadtableView 的控制器的方法:

cellIdentifier = @"CustomCell";
[tableView registerNib:[UINib nibWithNibName:@"customCell" bundle:nil]

这需要两个参数:

  1. 对 UINib 实例的引用,通过传入 UINib 的nibWithNibName方法获得
  2. NSString先前创建的单元格标识符

在将 NIB 注册为单元后,该dequeueReusableCellWithIdentifier方法将执行以下两项操作之一:

  1. 如果有一个缓存单元可供重用,它将被出列并可以通过单元变量访问。
  2. 如果没有可重复使用的单元格, dequeueReusableCellWithIdentifier将从已注册的 NIB 创建一个。

这两件事都发生在幕后,因此现在不再需要手动检查单元格的存在dequeueReusableCellWithIdentifier 将为您处理所有这些

于 2013-02-21T13:33:43.207 回答