我在父级View Controller中有一个已安排的子视图(一个表视图)。
让我们调用父VC CollectionViewController和子视图(表VC)ResultsTableViewController。
我已将表视图添加到我的stackview中(在CollectionViewController中),如下所示:
let hitsTableController = ResultsTableViewController()
stackView.addArrangedSubview(hitsTableController.tableView)
然后我在ResultsTableViewController(子视图)中实现didSelectRowAt:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let hit = hitsSource?.hit(atIndex: indexPath.row)
print("The ID is " + hit?.id)
let vc = self.storyboard?.instantiateViewController(withIdentifier: "ItemDetailViewController") as? ItemDetailViewController
self.navigationController?.pushViewController(vc!, animated: true)
}
}
我能够打印有关所选单元格的信息(在本例中为ID),但是我无法弄清楚在按下单元格时如何导航到“详细信息视图控制器”。
我没有运气尝试过这个
let vc = self.storyboard?.instantiateViewController(withIdentifier: "ItemDetailViewController") as? ItemDetailViewController
self.navigationController?.pushViewController(vc, animated: true)
代码运行,但是什么也没有发生。任何帮助将不胜感激。
解决方案
添加此
addChild(hitsTableController)
hitsTableController.didMove(toParent: self)
在此之前
stackView.addArrangedSubview(hitsTableController.tableView)
如下面的科学怪人所述,问题是ResultsTableViewController无法访问导航堆栈。这是因为我必须使其成为父VC CollectionViewController的子代。现在,我可以毫无问题地调用它了。
self.navigationController?.pushViewController(vc!, animated: true)
答案 0 :(得分:0)
在应用程序崩溃时尝试强制打开对象,然后向我们提供崩溃详细信息
let vc = self.storyboard!.instantiateViewController(withIdentifier: "ItemDetailViewController") as! ItemDetailViewController
self.navigationController!.pushViewController(vc, animated: true)
答案 1 :(得分:0)
更新:通过添加的详细信息,很明显,问题是视图控制器未嵌入UINavigationController
中。您会看到navigationController
是可选的,并且仅当控制器嵌入在UINavigationController
中时才会分配。试试这个:
let hitsTableController = UINavigationController(rootViewController: ResultsTableViewController())
stackView.addArrangedSubview(hitsTableController.tableView)
似乎故事板中没有ItemDetailViewController
,或者您忘记了设置标识符,这在您的情况下似乎不太可能。因此,我得出结论ItemDetailViewController
是通过编程创建的。因此,您应该使用空的初始化程序初始化ItemDetailViewController
来显示它。
let vc = ItemDetailViewController()
self.navigationController?.pushViewController(vc, animated: true)