【问题标题】:Using Interface Builder for UITableViews为 UITableView 使用 Interface Builder
【发布时间】:2010-09-13 04:05:40
【问题描述】:
我还处于 iPhone 开发学习过程的早期阶段。我正试图了解各种作品。现在,我刚刚采用了基本的 NavigationController 模板,并且正在尝试创建一个带有几个文本字段的简单分组表视图。我似乎无法做的是让 Interface Builder 允许我将 UITableViewCell 放入 UITableView 中,这样我就可以将文本字段添加到 Cell 中。这甚至可能吗(似乎它应该被赋予 UITableViewCell 是一个可拖动控件的事实)?
如果不是,这是否意味着所有这些都是我需要自己编写的代码?
【问题讨论】:
标签:
iphone
cocoa-touch
uitableview
interface-builder
【解决方案1】:
您可以使用 Interface Builder 创建单元格,但您必须使其成为顶级对象,而不是表格视图的子级。然后,您可以在视图控制器的 tableView:cellForRowAtIndexPath: 函数中返回此单元格。
确保在 Interface Builder 中给单元格一个 identifier,然后使用与 dequeueReusableCellWithIdentifier: 相同的标识符(请参阅示例代码以了解其工作原理 - 想法是单元格被重复使用 - 操作系统一次只会分配尽可能多的单元格在屏幕上。节省内存的聪明方法。)
【解决方案2】:
小心 Boot To The Head 的方法。如果您没有正确处理您的IBOutlets,您将泄漏。我将在不发布代码 (NDA) 的情况下尽我所能解释这一点。如果您打算使用 IB 来创建您的单元格,请将 UITableViewCell 创建为自己的 Xib 文件。将文件的所有者设置为您的 UIViewController 子类(或 UITableController)。调用IBOutlet 类似UITableViewCell *cellFactory。在UITableViewDataSource 方法tableView:cellForRowAtIndexPath: 中执行以下伪代码;
- 尝试使用您在 IB 中设置的标识符将单元格出列
- 如果成功,您就完成了。只需使用单元格
- 否则您需要创建一个新单元格。将
[NSBundle mainBundle] loadNibNamed:owner:options: 方法与您的正确xib 文件一起使用。这将用一个新的单元格填充 cellFactory ivar。棘手的部分来了。
- 设置
cell = cellFactory 然后释放cellFactory 并将其设置为nil 以确保您不会意外再次使用它。您现在可以正常使用手机了
【解决方案3】:
不幸的是,它并没有真正以这种方式工作 - 表格视图中的单元格是由委托在运行时生成的。不过,事实证明这是非常简单的代码。查看 tableview 示例代码,很容易理解。