Swift-доступ к окну AppDelegate из viewController

Я делаю пошаговое руководство (onboarding flow) в своем приложении, и я хотел бы иметь кнопку пропуска. Кнопка находится на viewController, поэтому я понял, что лучшим способом перейти на другой viewController будет окно делегата приложения access.

однако он продолжает получать мне ошибку, которая AppDelegate.Тип не имеет члена под названием "window".

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

есть ли что-то неправильное в таком подходе?

спасибо заранее!

5 ответов


у вас опечатка, должно быть appDelegate не AppDelegate. Вот так:

@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
    }

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

Swift 3

Это лучший способ:

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

вы используете имя протокола (т. е. AppDelegate) вместо экземпляра:

должно быть:

appDelegate.window!.rootViewController = RootViewController   

Это решение работает для : После входа / регистрации программно добавьте UITabbarController

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