在 containerView 中使用 pushViewController 不工作
using pushViewController in containerView Not work
我创建了包含 tableViewController 的 containerView。
主要问题,当用户点击信息时,tableViewController 必须显示用户点击的信息。
它显示我使用时的信息 present(<#T##UIViewController#>, animated: <#T##Bool#>, completion: <#T##(() -> Void)?#>)
但如果我调用 self.navigationController?.pushViewController
则不起作用
主要问题是当我制作 vc.info = info
时它不起作用,信息有价值但使用注入另一个 class 中的值为零。
这是我的代码:
func showLoginDetailsOnIpad(encryptedDataBase: info) {
self.view.addSubview(loginContainer)
let mainStoryboard : UIStoryboard?
mainStoryboard = UIStoryboard(name: "StoryboardiPad", bundle: nil)
let vc = mainStoryboard!.instantiateViewController(withIdentifier: "tableVC") as! tableVC
vc.info = info
vc.showingLoginInfo = true
vc.modalPresentationStyle = .automatic
self.navigationController?.pushViewController(vc, animated: true)
}
说明
您提到了容器视图的使用。 table 控制器显示在 containerView 中,不会自动获取最近的 navigationController
.
的引用
所以在这一行中:self.navigationController?.pushViewController(vc, animated: true)
self.navigationController
实际上可能是 nil
。您可以通过在 运行 推送方法之前打印其值来确认这一点,如下所示:
print(self.navigationController) // See if this prints nil.
self.navigationController?.pushViewController(vc, animated: true)
修复
要解决此问题,我建议将对父控制器的 navigationController
的引用传递给子控制器 - 通过嵌入 segue。
在你的父控制器中,你可以使用这个代码:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destination = segue.destination as? UITableViewController{
destination.navigationController = self.navigationController
}
}
并且在您的 table 视图控制器中,保持代码不变。
我创建了包含 tableViewController 的 containerView。 主要问题,当用户点击信息时,tableViewController 必须显示用户点击的信息。
它显示我使用时的信息 present(<#T##UIViewController#>, animated: <#T##Bool#>, completion: <#T##(() -> Void)?#>)
但如果我调用 self.navigationController?.pushViewController
主要问题是当我制作 vc.info = info
时它不起作用,信息有价值但使用注入另一个 class 中的值为零。
这是我的代码:
func showLoginDetailsOnIpad(encryptedDataBase: info) {
self.view.addSubview(loginContainer)
let mainStoryboard : UIStoryboard?
mainStoryboard = UIStoryboard(name: "StoryboardiPad", bundle: nil)
let vc = mainStoryboard!.instantiateViewController(withIdentifier: "tableVC") as! tableVC
vc.info = info
vc.showingLoginInfo = true
vc.modalPresentationStyle = .automatic
self.navigationController?.pushViewController(vc, animated: true)
}
说明
您提到了容器视图的使用。 table 控制器显示在 containerView 中,不会自动获取最近的 navigationController
.
所以在这一行中:self.navigationController?.pushViewController(vc, animated: true)
self.navigationController
实际上可能是 nil
。您可以通过在 运行 推送方法之前打印其值来确认这一点,如下所示:
print(self.navigationController) // See if this prints nil.
self.navigationController?.pushViewController(vc, animated: true)
修复
要解决此问题,我建议将对父控制器的 navigationController
的引用传递给子控制器 - 通过嵌入 segue。
在你的父控制器中,你可以使用这个代码:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destination = segue.destination as? UITableViewController{
destination.navigationController = self.navigationController
}
}
并且在您的 table 视图控制器中,保持代码不变。