如何在root视图控制器类型为UIViewController的应用程序中弹出到根控制器?

时间:2018-04-10 10:54:45

标签: swift appdelegate

我已经实现了SWRevealViewController类,用于显示前控制器后面的后视(左和/或右)视图控制器。 UIViewController类型的SWRevealViewController是应用程序中的入口点。

我想要什么?
class AppDelegate调用applicationDidEnterBackground时,我想弹出除根视图控制器之外的堆栈上的所有视图控制器并更新显示。

我尝试了什么?

    if let appDelegate = UIApplication.shared.delegate as? AppDelegate {
        appDelegate.window?.rootViewController?.dismiss(animated: true, completion: nil)
    }

我知道如果SWRevealViewController嵌入在UINavigationController中,我可以简单地执行(appDelegate.window?.rootViewController as? UINavigationController)?.popToRootViewController(animated: true),但它没有嵌入到nav控制器中,如果我嵌入它,那么我将不会得到相同的行为那么我该如何解决这个问题呢?

enter image description here

2 个答案:

答案 0 :(得分:0)

我相信你要做的就是“放松世界”。

它们记录在技术说明中:

https://developer.apple.com/library/content/technotes/tn2298/_index.html

有了这个,你应该能够将你的根视图控制器识别为展开segue的目标,并且在需要的时候,按照它发生的各个步骤进行展开。

您还可以查看包含术语“展开”的UIViewController的各种方法的文档

https://developer.apple.com/documentation/uikit/uiviewcontroller

答案 1 :(得分:0)

尝试一下:

 let navVC = ((UIApplication.shared.delegate as? AppDelegate)?.window)?.rootViewController as? UINavigationController
    for VC: UIViewController in (navVC?.viewControllers)! {
        if (VC is MYViewController) {
            navVC?.popToViewController(VC, animated: true)
            break
        }
    }