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()