为什么预先确定的单元格在Sub viewcontroller中无效?的iOS

时间:2018-09-25 15:17:04

标签: swift

有一个ViewController作为根视图控制器,我想添加一个TableViewController作为子视图控制器,所有这两个控制器都是在Story Board中预先设计的。在TableViewController故事板上,将表视图设置为Dynamic,添加1个自定义单元并将其标识符设置为“ cellReuse”。

在根视图控制器代码中,我将TableViewController添加为Sub ViewController,并将它的tableview添加为Subview,例如:

var vcSubViewController:MyTableViewController
vcSubViewController = MyTableViewController()
vcSubViewController.delegate = self
self.addChildViewController(vcSubViewController)
self.addSubView(vcSubViewController.tableview)

在tableview控制器代码中:

tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
     ....   
let  cell = self.tableView.dequeueReusableCell(withIdentifier: "cellReuse", for: indexPath)
     ....
    }

,运行时出现错误,提示找不到重用标识符。

要解决此问题,我必须通过代码创建UITableViewCell,看来我在Story Board中设计的单元格尚未实现。请问这是怎么回事?干杯!

2 个答案:

答案 0 :(得分:0)

在代码中使用的addChild(_:)方法是在使用容器视图控制器时由系统调用的。您不能以这种方式直接调用它。您可以重写该方法(通过从中调用super),但是一般而言,要实现的目的(据我所知,您希望将具有表视图的视图控制器嵌入另一个视图控制器中)可以通过使用容器视图控制器来实现。

答案 1 :(得分:0)

EmilioPelaez是正确的,您需要从情节提要或xib实例化以包括在情节提要/ IB中定义的标识符。

if let childVC = UIStoryboard(name: "Something", bundle: nil)
            .instantiateViewController(withIdentifier: "MyTableViewController") as? MyTableViewController {

     childVC.delegate = self
     self.addChildViewController(childVC)
     self.view.addSubView(childVC.tableview)
}