2016-08-01 9 views
1

Ich bin dabei, eine App mit xcode/swift zu erstellen, die sowohl ein verschiebbares Sidebar-Menü als auch einen Anmelde-/Anmeldeprozess implementiert. Die Funktion zum Verschieben des Seitenleistenmenüs sollte nur in der nächsten Ansicht verfügbar sein, unmittelbar nachdem Sie sich entweder angemeldet oder angemeldet haben.Xcode Swift: Anmeldung/Anmeldung wird wegen slideroutmenu nicht angezeigt

folgte ich den Anweisungen für die Schiebe Sidebar Tutorial hier: Ray Wenderlich - Sidebar Tutorial

Problem ist -> nur Meine Sidebar Menü Funktionalität funktioniert, wenn die Ansicht enthält die erste Ansicht beim Öffnen der App angezeigt wird.

Manchmal ist dies in Ordnung, denn sobald ein Benutzer angemeldet ist, wird die Seitenleiste als erste Ansicht angezeigt - dies ist jedoch nicht immer der Fall - Abgemeldete Benutzer müssen die Anmeldung/Anmeldung abschließen, bevor sie dazu in der Lage sind um zu dieser Ansicht zu gelangen.

Ich habe die Startansicht der App so eingestellt, dass sie auf meinen LoginViewController im Storyboard zeigt, also weiß ich nicht, warum das nicht zuerst geladen würde !?

Meine Vermutung ist, dass dies etwas mit dem Setzen des rootviewcontroller in meiner AppDelegate.swift Datei zu tun hat.

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 

} 

Wie kann ich erzwingen, dass die loginViewController zuerst auf Start der Anwendung angezeigt bekommen !?

+0

Instanziieren Sie einfach Ihre 'loginVC' und machen Sie sie zu Ihrem' rootViewController', dann von dort instanziieren Sie Ihre 'containerViewController' und verwenden' loginVC', um es zu präsentieren, können Sie einige 'NSUserDefault' zu überprüfen, ob Benutzer protokolliert oder nicht, dann gerade das 'containerViewController' das nächste Mal – Tj3n

Antwort

1

Zunächst einmal müssen Sie Ihre RootViewController als loginVC so in Ihrer AppDelegate Datei über Verfahren ersetzen setzen mit

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 

} 

jetzt sollten Sie Zustand des Benutzers in userDefaults oder etwas sparen. Zum Beispiel, wenn der Benutzer nicht in

angemeldet
NSUserDefaults.standardUserDefaults().setBool(false, forKey: "isUserLoggedIn) 

und wenn die Benutzeranmeldung an die App Sie die userdefault aktualisieren können wie so

NSUserDefaults.standardUserDefaults().boolForKey("isUserLoggedIn") 

so Ihre endgültige Funktion wie etwas, das

aussehen sollte
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 

}