我正在使用xcode / swift创建应用程序,同时实现滑动侧边栏菜单以及登录/注册过程。只有在完成登录或注册后,才能在下一个视图中访问滑动侧边栏菜单功能。
我按照滑动边栏教程的说明进行操作:Ray Wenderlich - 补充工具栏教程
问题是 - >仅当包含视图是打开应用程序时显示的第一个视图时,我的侧边栏菜单功能才有效。
有时这是可以的,因为一旦用户登录,侧边栏菜单视图就会显示第一个视图 - 但情况并非总是如此 - 注销用户必须先完成注册/登录才能访问/转换到此视图。
我确实将应用程序的初始视图设置为指向故事板中的LoginViewController,因此我不知道为什么这不会先加载!?
我的猜测是这与在我的AppDelegate.swift文件中设置rootviewcontroller有关。
AppDelegate.swift
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {
window = UIWindow(frame: UIScreen.mainScreen().bounds)
let containerViewController = ContainerViewController()
window!.rootViewController = containerViewController
window!.makeKeyAndVisible()
return true
}
如何强制在应用程序启动时首先显示loginViewController!?
答案 0 :(得分:1)
首先,您需要将rootViewController设置为loginVC,以便在appDelegate文件中替换上面的方法
func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {
window = UIWindow(frame: UIScreen.mainScreen().bounds)
// replace names accordingly
let loginViewController = LoginViewController()
window!.rootViewController = loginViewController
window!.makeKeyAndVisible()
return true
}
现在你应该在userDefaults中保存用户的状态。例如,如果用户未登录
NSUserDefaults.standardUserDefaults().setBool(false, forKey: "isUserLoggedIn)
当用户登录应用程序时,您可以像这样更新userDefault
NSUserDefaults.standardUserDefaults().boolForKey("isUserLoggedIn")
所以你的最终功能看起来应该是这个
func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {
window = UIWindow(frame: UIScreen.mainScreen().bounds)
if NSUserDefaults.standardUserDefaults().boolForKey("isUserLoggedIn") == true{
let containerViewController = ContainerViewController()
window!.rootViewController = containerViewController
window!.makeKeyAndVisible()
}
else {
let loginViewController = LoginViewController()
window!.rootViewController = loginViewController
window!.makeKeyAndVisible()
}
return true
}