2016-05-05 7 views
4

Ich erstelle eine App für iOS und möchte einen Seitenaufruf-Controller öffnen (nicht einen normalen Ansichts-Controller), sondern nur das erste Mal, wenn ein Benutzer die Anwendung öffnet.Wie öffne ich einen Seitenaufruf-Controller in meiner iOS App nur beim ersten Start der App?

Das Problem ist, dass ich einen neuen Seitenaufruf-Controller innerhalb des Codes nicht öffnen kann. Der erste Bildschirm, den die Benutzer sehen, ist der Anmeldebildschirm, aber beim ersten Besuch wechseln Sie zum Seitenaufruf-Controller.

Das ist, was ich bisher im Login-Bildschirm Viewcontroller haben:

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    let launchedBefore = NSUserDefaults.standardUserDefaults().boolForKey("launchedBefore") 
    if launchedBefore { 
     //Not the first time, show login screen. 
    } 
    else { 
     NSUserDefaults.standardUserDefaults().setBool(true, forKey: "launchedBefore") 
     //First time, open a new page view controller. 
    } 
    let secondViewController:InstructionViewController = InstructionViewController() 

    self.presentViewController(secondViewController, animated: true, completion: nil) 
} 

Die Seite View-Controller, die ich öffnen wollen bereits auf dem Storyboard erstellt wird.

+0

Sie sind in der Nähe, Sie möchten den View-Controller in der App-Delegiertenmethode didFinishLaunchingWithOptions präsentieren, nachdem Sie alle Einstellungen für rootViewController abgeschlossen haben. – bolnad

Antwort

3

App Delegierte willFinishLaunchingWithOptions Methode wäre der beste Ort (AFAIK). Überprüfen Sie den Zustand und stellen Sie den Root-View-Controller des Fensters entsprechend ein.

+0

lassen Sie mich wissen, wenn Sie weitere Informationen benötigen – harshitgupta

+0

Als Anfänger mit XCode, ich weiß wirklich nicht, wo ich anfangen soll, gibt es ein Beispiel ist verfügbar? –

+0

http://Stackoverflow.com/a/35862933/1120688 sollte Ihnen den Kopf geben – harshitgupta

2

Mit den anderen Antworten konnte ich das Problem lösen.

In der appDeligate Datei, die Sie die erste Funktion mit diesem ersetzen müssen:

var window: UIWindow? 
var storyboard:UIStoryboard? 

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

    window = UIWindow(frame: UIScreen.mainScreen().bounds) 
    window?.makeKeyAndVisible() 

    let launchedBefore = NSUserDefaults.standardUserDefaults().boolForKey("launchedBefore") 

    if launchedBefore { 
     //Not the first time, show login screen. 
     storyboard = UIStoryboard(name: "Main", bundle: nil) 
     let rootController = storyboard!.instantiateViewControllerWithIdentifier("Login") 

     if let window = self.window { 
      window.rootViewController = rootController 
     } 

    } 
    else { 
     NSUserDefaults.standardUserDefaults().setBool(true, forKey: "launchedBefore") 
     //First time, open a new page view controller. 
     storyboard = UIStoryboard(name: "Main", bundle: nil) 
     let rootController = storyboard!.instantiateViewControllerWithIdentifier("Instruction") 

     if let window = self.window { 
      window.rootViewController = rootController 
     } 
    } 

    return true 
} 

„Login“ und „Befehl“ sind die Namen der (Seite) View-Controller.

Ich bin mir nicht sicher, ob das der robusteste Code ist, aber es funktioniert gut für mich.

window = UIWindow(frame: UIScreen.main.bounds) 
    window?.makeKeyAndVisible() 

    let launchedBefore = UserDefaults.standard.bool(forKey: "launchedBefore") 

    if launchedBefore { 
     //Not the first time, show login screen. 
     storyboard = UIStoryboard(name: "Main", bundle: nil) 
     let rootController = storyboard!.instantiateViewController(withIdentifier: "webView") 

     if let window = self.window { 
      window.rootViewController = rootController 
     } 

    } 
    else { 
     UserDefaults.standard.set(true, forKey: "launchedBefore") 
     //First time, open a new page view controller. 
     storyboard = UIStoryboard(name: "Main", bundle: nil) 
     let rootController = storyboard!.instantiateViewController(withIdentifier: "progressView") 

     if let window = self.window { 
      window.rootViewController = rootController 
     } 
    } 

nicht die

var storyboard:UIStoryboard? 

Bevor didFinishLaunchingWithOptions einstellen Vergessen, und die Kennungen zu Ihrer eigenen ähnlich zu setzen:

+0

Ich denke, Sie sollten auch deaktivieren Sie das (Standard) automatische Laden Ihres Haupt Storyboard durch Entfernen des Eintrags in Ihrer Plist-Datei. –

1

Hier ist Code Lesleys 3 Swift aktualisiert Anzeigen von Controller-IDs

Verwandte Themen