0

我有一个包含分组表视图和一个单元格的 Nib 文件。单元格通过插座连接到 UITableViewController。在cellForRowAtIndexPath我只返回那个单元格时,我可以在表格视图中看到一个单元格。但是,当我将表格的行数更改为 2 并想显示相同的单元格时,我只能看到一个,看来第二个单元格应该在那里,因为可见单元格的下角没有圆角,但是,它不存在。

如果我在 nib 文件中创建第二个单元格对象,第二个插座并将其作为第二行返回,它看起来很好。我的单元格具有在 IB 中指定的标识符。

这是否意味着我不能将单元格对象重复使用不止一行?

4

2 回答 2

1

就像视图中的每个可见按钮都需要一个 UIButton 实例一样,每个可见行都需要一个单元格实例。

管理此问题的常见模式是向 tableview 询问不再需要的先前实例化的单元格 ( dequeueReusableCellWithIdentifier:),然后返回该单元格。如果表格视图没有任何可重复使用的单元格,则必须从 nib 文件中实例化一个新单元格。

网上有很多关于这方面的例子,你也可以在 SO 上找到一些例子,例如在这个答案中。

我建议您通读 Apples TableView Programming Guide,其中还包含有关从 nib 加载单元的部分

更新:尝试以不同的方式解释 TableView 和单元格的重用。

假设我们有一个带有旧画的大型画廊。数以万计的画作。不过,画廊只有一间展示室,墙壁上只有十幅画作。当参观者感到无聊并想看一些新画作时,画廊经理不得不不时更换画作。

每幅展示的画都需要一个框架。没有框架,它不能放在墙上。框架的制造成本很高,并且占用大量空间。框架制造商希望有时间和金钱来构建所需的数千个框架。

他发现他想要所有目前未展示的画作都需要框架。他现在展示的画作只需要十帧。当画廊经理拿下一幅画时,画框制作者将画框存放起来,当画廊管理者放出一幅新画并要求画框制作者为其提供画框时,画框制作者又将前一幅画的画框归还。

有一天,绘画之间所需的空间规则无缘无故地改变了。画廊经理可以在陈列室里再放两张照片。他从储藏室里挑出两幅画,向画框师要画框。框架制造商没有备用框架,需要制作两个新框架。

现在,假设画廊是一个 TableView,所有的画都是数据行。有十幅可见绘画空间的展示室是屏幕,有十个可见行的空间。每个可见行都需要一个单元格,就像每个显示的画都需要一个框架一样。

最后,您不必太在意通过重用一个单元来节省资源。这是 TableViews 的责任。这是 TableView 需要多少个单元格以及如何使用它的实现细节。该协议定义了如何向 TableView 请求可重复使用的单元格,并且文档说明您应该这样做。这应该足够了。演示项目表明 TableView 可以管理非常大量的数据。如果您的项目由于从 nib 实例化 10-20 个单元格而在性能方面遇到困难,那么您的 nib 文件或其他东西可能存在一些问题。但是,有一些讨论是关于从 nib 加载与在代码中构建单元格的性能。你可能会感兴趣。

于 2010-07-16T06:21:56.750 回答
0

我有一些非常奇怪的行为,听起来很像你前段时间所描述的。

最终我发现问题在于我刚刚向 xib 添加了一个表格视图单元格,其中包含其他项目,例如父表格视图和控制器。我必须做的是为每个表格视图单元格单独创建一个单独的 xib。我认为问题在于从错误构建的 xib 加载表格视图单元格会混淆问题。

正如 Vegar 所说,有很多关于如何做到这一点的教程。

于 2010-07-16T06:29:57.010 回答