Ios 我可以在多个表视图中使用单个原型单元吗?

Ios 我可以在多个表视图中使用单个原型单元吗?,ios,ios5,uitableview,custom-cell,Ios,Ios5,Uitableview,Custom Cell,我在两个不同的控制器中有两个不同的表视图。但我需要在其中显示的细胞看起来一模一样。我已经在一个tableView中创建了一个原型单元格,并将其子类UiTableViewCell。现在,如果我想在不同的控制器中使用相同的单元,我如何使用它 如果我只是将customCell文件导入到新控制器中,并使用故事板中给定的相同标识符对其进行解密,那么它将无法工作。上面说 -[UITableView]中的断言失败 _configureCellForDisplay:forIndexPath:] 由于未捕获异常而

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

如果我只是将customCell文件导入到新控制器中,并使用故事板中给定的相同标识符对其进行解密,那么它将无法工作。上面说

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

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


很明显,这意味着细胞是零。那么,如何从故事板实例化相同的单元呢?是否可能,或者我是否也必须为新表创建不同的customCell

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


如果不是,您可能希望发布源代码。。我得到了它。首先,

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

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

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

我在不同的应用程序中使用了相同的UITableViewCell。只需将一个TableViewCell复制到另一个应用程序。也就是说,两个应用都有相同的布局等等。这些应用不属于同一个工作区。安装工作正常,没有问题或错误。。只是不知道这是否是一个好的实践。

您可以在不同的视图控制器中使用相同的原型单元,您只需要将它从您设计它的控制器的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
}

对。我们可以将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和prototype单元格的ViewController,我们在ViewControllerB的tableview上使用相同的单元格

对我来说,甚至不需要更改reuseIdentifier。
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
}