【问题标题】:Can I use a single prototype cell in multiple tableViews?我可以在多个 tableViews 中使用单个原型单元格吗?
【发布时间】:2012-10-11 21:24:53
【问题描述】:

我在两个不同的控制器中有两个不同的表视图。但是我需要在其中显示的单元格看起来相同。我在一个 tableView 中创建了一个原型单元格,并将 UiTableViewCell 子类化。现在,如果我想在不同的控制器中使用同一个单元格,我该如何使用它?

如果我只是在新控制器中导入该 customCell 文件并使用故事板中给定的相同标识符将其从队列中取出,它将无法工作。它说

-[UITableView 中的断言失败 _configureCellForDisplay:forIndexPath:]

由于未捕获的异常而终止应用程序 'NSInternalInconsistencyException',原因:'UITableView 数据源 必须从 tableView 返回一个单元格:cellForRowAtIndexPath:'

所以,显然这意味着,单元格为零。那么如何从情节提要中实例化同一个单元格呢?是否有可能或者我也必须为新表创建一个不同的 customCell ?

【问题讨论】:

    标签: ios ios5 uitableview custom-cell


    【解决方案1】:

    K.. 我明白了。首先,

    我不能在两个不同的 tableview 中使用一个原型单元格。但是我 可以在两个不同的 tableview 中使用相同的 tableViewCell 子类。

    要实现它,只需从一个控制器复制原型单元格并将其粘贴为另一个 tableview 的原型单元格。粘贴的 tableview 的类保持不变。只需更改重用标识符。并使用它。

    编辑: 如果您的单元格具有相当复杂的 UI,那么单独为单元格创建单独的 xib 会更有意义。然后以编程方式register the xib 使用表格视图。这样,您将只有一个单元格副本,并且在 ui 发生更改时更好地维护它。

    【讨论】:

    • 对我来说,甚至没有必要更改reuseIdentifier。
    【解决方案2】:

    您可以在不同的视图控制器中使用相同的原型单元,您只需将其从您设计它的控制器的 tableview 中取出。

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
      let viewControllerInWhichCellWasDefined = tabBarController?.viewControllers?[0]   
      let cell = viewControllerInWhichCellWasDefined.tableView.dequeueReusableCell(withIdentifier: "identifier", for: indexPath)
      return cell
    }
    

    【讨论】:

      【解决方案3】:

      如果您在 XIB 中创建自定义单元格,它应该可以正常工作。但是,我怀疑单元格的identifier 导致了问题。尝试更改每个表格视图控制器的单元格标识符。

      如果不是,您可能需要发布源代码

      【讨论】:

        【解决方案4】:

        是的。我们可以将 ViewControllerA 的 tableview 的原型单元用于 ViewControllerB 的 tableview。只需要在ViewControllerB中实现如下代码

        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            
            let vc_array = self.navigationController?.viewControllers 
            let view_controller = vc_array![vc_array!.count - 2] as! ViewControllerA
            let cell = view_controller.tableView.dequeueReusableCell(withIdentifier: "ViewControllerA_ID", for: indexPath) as! ViewControllerA
            
            return cell
        }
        

        这里的 ViewControllerA 是 ViewController,它包含带有原型单元格的 tableview,我们在 ViewControllerB 的 tableview 上使用相同的单元格

        【讨论】:

          【解决方案5】:

          我在不同的应用程序中使用了相同的 UITableViewCell。只需将一个 TableViewCell 复制到另一个应用程序。那就是两个应用程序具有相同的布局等。这些应用程序不属于同一个工作区。设置很好,没有问题或错误..只是不知道这是不是好习惯。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-05-10
            • 1970-01-01
            • 2013-03-10
            • 2012-07-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多