【问题标题】: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 中不知何故没有这样的功能。

标签: objective-c ios xcode nib uistoryboard


【解决方案1】:

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

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

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

【讨论】:

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

在 Swift 4 中:

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

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

    (或)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-14
    • 2013-12-25
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多