在 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 视图控制器中,保持代码不变。