有一个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中设计的单元格尚未实现。请问这是怎么回事?干杯!
答案 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)
}