0

当使用 didReceive 方法从视图控制器单击推送通知时,我已设法从应用程序委托打开视图控制器。我的问题是管理层次结构。考虑我有视图 A、B 和 C,这样我将在以下步骤中看到视图 C:视图 A -> 视图 B -> 视图 C。但是当我单击推送通知时,它会将我带到视图 C,所以当我单击时在视图 C 的后退按钮上,视图 B 和视图 A 的堆栈顺序应该相同。有可能这样做吗?

编辑:如果有帮助,这是我的代码

我想要 BaseVc > secondBaseVc > LogbookVc > DetailVc

        if let info = userInfo as? [String:Any]{
        let id = info["id"] as? String ?? ""


        let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
        let BaseVc = storyBoard.instantiateViewController(withIdentifier: "BaseViewController") as! BaseViewController
        let secondStoryboard : UIStoryboard = UIStoryboard(name: "Second Storyboard", bundle: nil)

        let secondBaseVc : BaseController = secondStoryboard.instantiateViewController(withIdentifier: "secondBaseVc") as! secondBaseVc
        let LogbookVc : LogbookVc = secondStoryboard.instantiateViewController(withIdentifier: "LogbookVc") as! LogbookVc
        let DetailVc: DetailVc = secondStoryboard.instantiateViewController(withIdentifier: "DetailVc") as! DetailVc

    }

我应该如何连接它们以显示 DetailVc 但按顺序排列它们,以便当我单击返回按钮时,我应该有 Logbook < secondBaseVc < Base Vc

4

1 回答 1

0

实际上并非如此,如果堆栈中没有那些 viewController A 和 B,那么你就不能有一些东西可以弹出到以前的 viewController。

在我看来,你可以做的是:你必须自己处理这个问题,比如收到通知时。必须先推A,再推B,再推C,放animation:false,这样就不会产生转场的效果。

.navigationController?.pushViewController(objA, 动画: false) .navigationController?.pushViewController(objB, 动画: false) .navigationController?.pushViewController(objC, 动画: false)

编辑

        let navigationController = UINavigationController(rootViewController: baseVc)
        navigationController.pushViewController(logbookVc, animated: false)
        navigationController.pushViewController(detailVc, animated: false)

        self.window?.rootViewController = navigationController
        self.window?.makeKeyAndVisible()

重要的提示:

使用camelCase创建对象名称以获得适当的可读性。例如let BaseVc应该让 baseVclogbookVcdetailVc相同

尝试并分享结果。

希望能帮助到你。

于 2018-07-25T14:43:45.607 回答