我有一个由注册和登录视图控制器组成的应用程序。用户注册或登录后,会将其置于主视图控制器中。我已经实现了NSUserDefaults
来存储用户登录状态的布尔值,这样当他们重新打开应用程序时,它们会自动被调到主视图控制器而不必通过登录视图控制器。我正在检查didFinishLaunchingWithOptions
中的用户登录状态,如果NSUserDefaults
中存储的登录状态为真,我将启动segue到主vc。
我目前正在使用以下代码来展示主视图控制器:
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let viewController = storyboard.instantiateViewController(withIdentifier :"Recorder") as! RecordController
let navController = UINavigationController.init(rootViewController: viewController)
if let window = self.window, let rootViewController = window.rootViewController
{
var currentController = rootViewController
while let presentedController = currentController.presentedViewController
{
currentController = presentedController
}
currentController.present(navController, animated: true, completion: nil)
}
这个问题是我不希望我的主视图控制器成为我的根视图控制器,并且呈现主视图控制器正在创建一些我无法弄清楚的奇怪的垂直间距 - 可能是一些问题导航控制器。
答案 0 :(得分:0)
根据澄清,我认为你应该做的就是这些。在干净启动时你应该拥有的是push
,其中登录视图控制器是它的根。如果您在登录时启动,请抓住导航控制器,然后将其他视图控制器推入堆栈。从UIKit的角度来看,这将是有效的,就像登录后显示segue一样。显示segues是自适应的。如果源位于导航控制器中,它们将变为导航present
,如果不在,则变为func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let loggedIn = true
if loggedIn, let navigationController = window?.rootViewController as? UINavigationController {
let newVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Recorder")
navigationController.pushViewController(newVC, animated: false)
} else {
print("expectation failed")
}
return true
}
。
{{1}}