2017-03-09 5 views
1

Ich verwende nur zwei ViewControllers, sagen viewControllerA und viewControllerB. Wenn Sie den folgenden Code in AppDelegate.swift verwenden, wird beim erstmaligen Start der Anwendung viewControllerA als initial viewController festgelegt, und ab dem zweiten Start wird viewControllerB als initial viewController festgelegt.Warum konnten wir nicht programmgesteuert zwischen viewControllern springen, während wir den ersten viewController programmatisch einrichten?

class AppDelegate: UIResponder, UIApplicationDelegate { 
var window: UIWindow? 
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 
{ 
    let defaultss = UserDefaults.standard 
    if (!defaultss.bool(forKey: "firstTimes")) { 
     self.window = UIWindow(frame: UIScreen.main.bounds) 

     let storyboard = UIStoryboard(name: "Main", bundle: nil) 

     let initialViewController = storyboard.instantiateViewController(withIdentifier: "ViewControllerA") 

     self.window?.rootViewController = initialViewController 
     self.window?.makeKeyAndVisible() 

    defaultss.set(true, forKey: "firstTimes") //set the key so it never executes again 
    } else 
    { 

     self.window = UIWindow(frame: UIScreen.main.bounds) 

     let storyboard = UIStoryboard(name: "Main", bundle: nil) 

     let initialViewController = storyboard.instantiateViewController(withIdentifier: "ViewControllerB") 

     self.window?.rootViewController = initialViewController 
     self.window?.makeKeyAndVisible() 
    } 
    return true 

} 

Es funktioniert gut. Aber wenn ich diesen Code verwende, dann konnte ich nicht programmgesteuert zwischen viewControllern entweder von A zu B oder B zu A springen, mit dem folgenden Code.

import UIKit 

class ViewControllerA: UIViewController { 


    override func viewDidLoad() 
    { 
     super.viewDidLoad() 
    } 

    @IBAction func buttonA(_ sender: Any) 
    { 
      let ViewControllerB = storyboard?.instantiateViewController(withIdentifier: "ViewControllerB") as! ViewControllerB 
      navigationController?.pushViewController(ViewControllerB, animated: true) 
    } 


} 

import UIKit 

class ViewControllerB: UIViewController { 

    override func viewDidLoad() 
    { 
     super.viewDidLoad() 

    } 


    @IBAction func buttonB(_ sender: Any) 
    { 
     let ViewControllerA = storyboard?.instantiateViewController(withIdentifier: "ViewControllerA") as! ViewControllerA 
      navigationController?.pushViewController(ViewControllerA, animated: true) 
    } 

} 

Wie kann ich beide erreichen, sollte ich in der Lage sein, den ersten Start und eingestellten Anfangsviewcontroller zu erkennen und ich sollte programmatisch auch zwischen Viewcontrollers springen können.

Ich verwende Xcode 8.2, Swift 3.0.

Vielen Dank im Voraus.

+2

vor UIViewController als Anfangs View-Controller als Root-View-Controller fügen Sie sie in UINavigationController setzen. –

+0

Was meinst du? @Dev_Tandel – Tester

+0

siehe Antwort von @ rv7284: Das ist, was ich meinte. –

Antwort

4

In App delegieren tun dies

let navC = UINavigationController(rootViewController: initialViewController) 
self.window?.rootViewController = navC 

statt

self.window?.rootViewController = initialViewController 
+0

Das funktioniert, aber es erstellt eine Navigationsleiste, Wie können wir es entfernen? – Tester

+0

Das ist eine alles defrrende Frage, aber wie auch immer, self.navigationController? .navigationBar.isHidden = true – rv7284

+0

Ja, Sie haben Recht. trotzdem danke. – Tester

Verwandte Themen