我正在快速构建一个 iOS 应用程序,在启动该应用程序时,我想首先显示 viewController2,它显示在 viewController1 之上,而 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。展示这些 Controller 似乎是最好的主意,因为它们没有导航栏,完成后你会想返回到 viewControlller1 - 也许我需要更改我的应用程序的结构,但理想情况下我不想这样做,因为我打算在其中提交这个 mvp下周。
非常感谢 iOS 和 swift 向导的帮助。
//认为我需要更改应用程序的结构以在导航堆栈中包含 viewController2 :( 因为使用已接受的答案会导致在显示 viewController2 之前短暂地看到 viewController1,这是合乎逻辑的 - 从长远来看,这会更好尽管有短期的痛苦
最佳答案
rootViewController
应该在一切之前设置。按照这个顺序做,它应该可以正常工作。
self.window?.rootViewController = navController
self.window?.makeKeyAndVisible()
navController.present(viewController2, animated: false)
关于ios - 通过 App Delegate 从 UINavigationController 呈现 UIViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41399323/