web-dev-qa-db-fra.com

Swift - Accès à la fenêtre AppDelegate à partir de viewController

Je fais une procédure pas à pas (flux d'intégration) dans mon application et j'aimerais avoir un bouton de saut ... Le bouton étant situé sur viewController, j'ai donc compris que le meilleur moyen de passer à un autre viewController était d'accéder à la fenêtre de délégation . 

Cependant, il ne cesse de m'obtenir l'erreur que AppDelegate.Type n'a pas de membre appelé "window".

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

Y a-t-il un problème avec une telle approche?

Merci d'avance!

18
DCDC

Vous avez une faute de frappe, elle est supposée être appDelegate pas AppDelegate Alors comme ça:

@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

C'est un meilleur moyen:

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

Vous utilisez le nom du protocole (c'est-à-dire AppDelegate) à la place de l'instance:

Devrait être:

appDelegate.window!.rootViewController = RootViewController   
1
giorashc

Cette solution fonctionne pour: Après la connexion/l'enregistrement, ajoutez par programme UITabbarController 

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