web-dev-qa-db-de.com

Swift - Zugriff auf das AppDelegate-Fenster über viewController

Ich mache in meiner App eine Komplettlösung (Onboarding Flow) und hätte gerne eine Schaltfläche zum Überspringen .. Die Schaltfläche befindet sich auf viewController. Ich habe also herausgefunden, dass der beste Weg, um zu einem anderen viewController zu wechseln, der Zugriff auf das Delegierungsfenster der App ist . 

Es wird jedoch immer eine Fehlermeldung angezeigt, dass AppDelegate.Type kein Mitglied namens "window" hat.

@IBAction func skipWalkthrough(sender: AnyObject) {
    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    AppDelegate.window!.rootViewController = RootViewController   
}

Stimmt etwas nicht mit einem solchen Ansatz?

Danke im Voraus!

18
DCDC

Sie haben einen Tippfehler, es sollte appDelegate nicht AppDelegate sein. So wie folgt:

@IBAction func skipWalkthrough(sender: AnyObject) {
    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    appDelegate.window!.rootViewController = RootViewController   
}

Swift 3.2

@IBAction func skipWalkthrough(_ sender: AnyObject) {
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        appDelegate.window!.rootViewController = controller
    }
40
Stefan Salatic

Swift 3+

    let appDelegate = UIApplication.shared.delegate as? AppDelegate
    let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let homeController =  mainStoryboard.instantiateViewController(withIdentifier: "HomeViewController") as! HomeViewController
    appDelegate?.window?.rootViewController = homeController
16
Dasoga

Swift 3

Dies ist ein besserer Weg:

    if let window = NSApplication.shared().windows.first {
        window.acceptsMouseMovedEvents = true;
    }
6
Ted Lowery

Sie können auch die bedingte Bindung verwenden, um window zu erreichen.

if let window = UIApplication.shared.windows.first {
    // use window here.
}
1

Sie können von überall in der App auf die Registerkartenleiste zugreifen. Verwenden Sie unten:

let appDelegate = UIApplication.shared.delegate as! AppDelegate

if let tabBarController = appDelegate.window!.rootViewController as? UITabBarController {
    if let tabItems = tabBarController.tabBar.items {
       let tabItem = tabItems[2]
       tabItem.badgeValue = "5" //enter any value
    }
}
1
Umitk

Sie verwenden den Protokollnamen (d. H. AppDelegate) anstelle der Instanz:

Sollte sein:

appDelegate.window!.rootViewController = RootViewController   
1
giorashc

Diese Lösung funktioniert für: Nach dem Anmelden/Registrieren Programmatisch UITabbarController hinzufügen 

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    appDelegate.window!.rootViewController = tabs //()
    appDelegate.window!.makeKeyAndVisible()
0
Humza Shahid