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

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

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

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

С таким подходом что-то не так?

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

Ответ 1

У вас есть опечатка, это должно быть 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
    }

Ответ 2

Это для Storyboard или без него, и это работает для 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

Ответ 3

Swift 3

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

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

Ответ 4

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

Должно быть:

appDelegate.window!.rootViewController = RootViewController   

Ответ 5

Вы можете получить доступ к панели вкладок в любом месте из приложения. Используйте ниже:

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

Ответ 6

Вы также можете использовать условное связывание, чтобы добраться до window.

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

Ответ 7

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

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