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.
vor UIViewController als Anfangs View-Controller als Root-View-Controller fügen Sie sie in UINavigationController setzen. –
Was meinst du? @Dev_Tandel – Tester
siehe Antwort von @ rv7284: Das ist, was ich meinte. –