在笔尖而不是情节提要中制作原型单元

Posted

技术标签:

【中文标题】在笔尖而不是情节提要中制作原型单元【英文标题】:Prototype Cells in a nib instead of a storyboard 【发布时间】:2012-01-24 08:12:47 【问题描述】:

为了更好的重用性,我想在我的 Storyboard 之外创建一个表格视图。

现在,当我在 Xcode 中使用 Nib 创建基于 UITableView 的 ViewController 时,我会在 nib 文件中获得默认的 TableView。但是,我无法在 Interface Builder 中像在 Storyboard 中那样添加原型单元。

目前无法在笔尖中添加原型单元格还是我遗漏了什么。

非常感谢您的帮助。

【问题讨论】:

除了上面的正确答案之外,我会参考这个案例的非常详细的解决方案。 - Link to StackAnswer(通过使用 UITableView: registerNib:forCellReuseIdentifier:tableView:cellForRowAtIndexPath:.xib 文件) 这个问题/答案让我有点困惑。我来这里是为了在 xib 中定义表格视图时寻找在表格视图中使用原型单元格的方法。在情节提要中完全有可能是的,但是在 xib 中不知何故没有这样的功能。 【参考方案1】:

ios 5 在 UITableView 上包含一个新方法:registerNib:forCellReuseIdentifier:

要使用它,请将 UITableViewCell 放在笔尖中。它必须是 nib 中唯一的根对象。

您可以在加载 tableView 后注册 nib,然后当您使用单元格标识符调用 dequeueReusableCellWithIdentifier: 时,它将从 nib 中提取它,就像您使用 Storyboard 原型单元格一样。

【讨论】:

太棒了 - 我只是想知道如何做到这一点,在这里搜索,看到你的答案,然后看到我的(结果是错误的!)是公认的答案。贝西,你应该接受这个。 @jrturton 感谢您的提醒 有没有办法将这些单元格的文件所有者设置为它们注册的控制器? 感谢您的解决方案。这可能是迄今为止我遇到的用于情节提要的可重复使用的 tableview 单元格的最佳方式。 唯一的缺点是你必须自己连接所有的动作选择器,我只是通过在 willDisplayCell 期间调用 addTarget 然后在单元格的 prepareForReuse 方法期间调用 removeTarget 来做到这一点。有什么更聪明的方法可以让你在故事板中连接东西吗?【参考方案2】:

在 Swift 4 中:

    从 UITableViewCell 创建新的 CocoaTouch 类,子类。 重要 - 启用复选框'同时创建 XIB 文件',它会创建一个 Swift 文件和一个 .xib 文件 在 Xib 中添加标签,就像在 Storyboard 中为原型单元所做的那样 将标签出口连接到新的 swift 文件

    重要 - 注册在 viewDidLoad 中的 nib 文件

    yourTableview.register(UINib.init(nibName: "CustomCellTableViewCell", bundle: nil), forCellReuseIdentifier: "Cell")
    

    (或)

    yourTableview.register(UINib(nibName: "CustomCellTableViewCell", bundle: Bundle.main), forCellReuseIdentifier: "Cell")
    
    在 cellForRowAtIndexPath 中实现数据源和委托,并将类型转换为 CustomCell。

【讨论】:

以上是关于在笔尖而不是情节提要中制作原型单元的主要内容,如果未能解决你的问题,请参考以下文章

快速制作模型(原型)视图 xcode

使用情节提要在 UItableview 上浮动按钮

带有自定义单元格的 ViewController 内的 UITableView 没有情节提要

我如何在情节提要中使用原型单元和搜索结果控制器

如何从情节提要中加载原型单元?

如何在不添加另一个 UIView 的情况下为情节提要中的 uitableViewCell 制作等宽分隔符?