21

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

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

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

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

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

4

5 回答 5

31

K..我明白了。首先,

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

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

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

于 2012-10-22T10:17:58.200 回答
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
}
于 2017-09-04T22:56:42.640 回答
0

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

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

于 2012-10-22T07:34:28.410 回答
0

是的。我们可以将 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 是包含带有原型单元格的 tableview 的 ViewController,我们在 ViewControllerB 的 tableview 上使用相同的单元格

于 2020-10-24T13:05:25.623 回答
-3

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

于 2017-02-24T22:16:21.003 回答