Swift 仅在使用导航控制器首次启动时显示视图
Posted
技术标签:
【中文标题】Swift 仅在使用导航控制器首次启动时显示视图【英文标题】:Swift showing view only on first launch with navigation controller 【发布时间】:2017-02-05 01:38:48 【问题描述】:我有一些代码只在应用程序首次启动时在我的故事板中显示第一个视图控制器。之后,我想跳过该页面并在每次发布时直接进入我的第二个视图。我已将第一个视图(连接到第二个视图)嵌入到导航控制器中。
我的问题是,在第一次启动后,当应用程序直接进入第二个视图时,它显示的视图顶部没有导航栏,我不知道为什么。
在我的 appdelegate 中:
func firstLaunchCheck()
let launchedBefore = UserDefaults.standard.bool(forKey: "launchedBefore")
if launchedBefore
let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let initialView : UIViewController = storyboard.instantiateViewController(withIdentifier: "mainScreen") as UIViewController
self.window = UIWindow(frame: UIScreen.main.bounds)
self.window?.rootViewController = initialView
self.window?.makeKeyAndVisible()
else
UserDefaults.standard.set(true, forKey: "launchedBefore")
更新: 我最后只是更改了导航控制器中嵌入的视图控制器(不包括第一个),因为将它放在那里对我来说没有意义。所以现在在第一次启动后它会加载导航控制器
【问题讨论】:
@jcka vc2 应该嵌入到导航控制器中,第二个应该转到顶部 vc 是 vc2 的导航控制器。 因为第二次你跳过了第一个具有导航栏的视图控制器。如果你想第二次显示导航栏,你还必须在第二个视图控制器上添加它 【参考方案1】:SecondViewController
没有添加到 UINavigationController
层次结构中,如果 appDelegate 中的 launchBefore 为 false,则可以在 firstVC 上推送 navigationBar
顶部的 navigationBar
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let secondVC = storyboard.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController
let navigationController = window.rootViewController as! UINavigationController
navigationController?.pushViewController(secondVC, animated: false)
【讨论】:
【参考方案2】:您需要在 UINavigationController 中嵌入第二个视图控制器,即“mainScreen”,然后使其成为应用窗口的 rootViewController。
let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let navigationController = UINavigationController.init(rootViewController: storyboard.instantiateViewController(withIdentifier: "mainScreen"))
self.window = UIWindow(frame: UIScreen.main.bounds)
self.window?.rootViewController = initialView
self.window?.makeKeyAndVisible()
【讨论】:
以上是关于Swift 仅在使用导航控制器首次启动时显示视图的主要内容,如果未能解决你的问题,请参考以下文章