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