通过推式通知打开ViewController时如何管理视图层次结构

时间:2018-07-25 14:36:14

标签: ios swift apple-push-notifications swift3.2

当我使用didReceive单击来自viewcontroller的推送通知时,已经设法从应用程序委托打开了一个View Controller 方法。我的问题是管理层次结构。考虑我拥有视图A,视图B和视图C,这样我将在以下步骤中看到视图C: 查看A->查看B->查看C。 但是,当我单击推送通知时,它将带我到View C,因此,当我单击View C的后退按钮时,它应该具有相同的堆栈顺序的View B和ViewA。有可能这样做吗?

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

我想要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

1 个答案:

答案 0 :(得分:0)

实际上,如果您没有在堆栈中放置那些viewController A和B,那么您将无法弹出到以前的viewController。

我认为您可以做的是:您必须自行处理,例如收到通知时。您必须先通过以下方式放动画A:然后按B,然后按C,然后按C: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 应该为 let baseVc ,并且与 logbookVc detailVc

相同

尝试并分享结果。

希望有帮助。