通过App Delegate从UINavigationController呈现UIViewController

时间:2016-12-30 16:19:10

标签: ios swift

我正在swift中构建一个iOS应用程序,在启动应用程序时,我想首先显示viewController2,它显示在viewController1之上,它嵌入在UINavigationController中。关键部分是ViewController2不是导航堆栈的一部分,而是呈现而不是被推送。

这是我目前的尝试,它不起作用,只在启动时显示ViewController1。

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let viewController1 = mainStoryboard.instantiateViewController(withIdentifier: "VC1") as! ViewController1
        let viewController2 = mainStoryboard.instantiateViewController(withIdentifier: "VC2") as! ViewController2
        let navController = UINavigationController(rootViewController: viewController1)
        viewController1.present(viewController2, animated: false)

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

        return true
    }

我有这个结构,因为我使用户能够从左到右和从右到左滑动以与Snapchat类似的方式获得viewController2和viewController3。提出这些控制器似乎是最好的主意,因为他们没有导航栏,一旦完成你就会想要返回viewControlller1 - 也许我需要改变我的应用程序的结构,但理想情况下不喜欢我想要提交这个mvp在下周内。

非常感谢iOS和快速向导。

//认为我需要更改应用程序的结构以在导航堆栈中包含viewController2 :(因为使用接受的答案会导致viewController1在viewController2出现之前被简要地看到,这是合乎逻辑的 - 从长远来看,这将更好尽管短期疼痛

1 个答案:

答案 0 :(得分:1)

应该在所有事情之前设置

rootViewController。按此顺序执行它应该可以正常工作。

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

navController.present(viewController2, animated: false)