我有一个包含分组表视图和单元格的Nib文件。单元格通过插座连接到UITableViewController。在cellForRowAtIndexPath
我只返回那个单元格,我可以在表格视图中看到一个单元格。但是,当我将表的行数更改为2并想要显示相同的单元格时,我只能看到一个,看起来第二个单元格就在那里,因为可见单元格的下角没有圆角,然而,它不存在。
如果我在nib文件中创建第二个单元格对象,第二个出口并将其作为第二行返回,则显示正常。我的单元格在IB中指定了标识符。
这是否意味着我不能将单元格对象重复使用多行?
答案 0 :(得分:1)
与视图中每个可见按钮需要一个UIButton实例的方式相同,每个可见行需要一个单元实例。
管理此问题的常见模式是向tableview询问不再需要的先前实例化的单元格(dequeueReusableCellWithIdentifier:
),然后返回该单元格。如果表视图没有任何可重用的单元格,则必须从nib文件中实例化一个新的单元格。
网上有很多这方面的例子,您也可以在这里找到一些,例如this answer。
我建议您阅读Apples TableView Programming Guide,其中还包含section on loading cells from nibs。
<强>更新: 尝试以不同的方式解释TableView和重用单元格。
让我们说我们有一个大型画廊 旧画。成千上万的画作。 画廊只有一个展示厅, 虽然,它只有十个墙 画。画廊经理必须 当时切换画作 游客感到无聊,想看 一些新的画作。
每个展出的画都需要一个 帧。没有框架,它不可能 穿上墙。框架价格昂贵 制作,并占用大量空间。该 框架制造商家伙想要时间也没有 钱建几千帧 需要。
他发现自己需要 所有画作的框架 此刻没有显示。他只会 当前需要10帧 展出的画作。当画廊 经理取下一幅画, 框架制造商存储框架,以及何时 画廊经理提了一个新的 绘画并要求框架制造商 它的框架,框架制造商 返回前一帧 又画了。
有一天, 需要空间之间,绘画,法规 变得没有任何理由。该 画廊经理能够忍受两个 在展示厅的更多图片。他 从商店挑选两幅画 房间,并要求框架制造商 帧。框架制造商没有备用 框架,需要制作两个新的 帧。
现在,让我们说画廊是一个TableView,所有画作都是数据行。展示厅有十个可见的绘画空间,是屏幕,有十个可见行的空间。每个可见行都需要一个单元格,就像每个显示的绘画需要一个框架一样。
最后,你不应该太在意通过重用一个单元来节省资源。这是TableViews的责任。这是TableView的实现细节,需要多少个单元以及如何使用它。该协议定义了如何向TableView请求可重用单元格,以及文档说明您应该这样做。那应该够了。演示项目显示TableView可以管理非常大量的数据。如果您的项目因为从nib实例化10-20个单元而遇到性能问题,那么您的nib文件可能会遇到一些问题。但是,有一些关于performance of loading from nib versus building cells in code的讨论。你可能会感兴趣。
答案 1 :(得分:0)
我有一些非常奇怪的行为,听起来非常像你前面所描述的那样。
最终我发现问题在于我刚刚向xib添加了一个表格视图单元格,其中包含其他项目,例如父表视图和控制器。我必须做的是分别为每个表视图单元创建一个单独的xib。我认为问题是从错误构建的xib加载表视图单元格会使问题混乱。
正如Vegar所说,有很多关于如何做的教程。