アプリでウォークスルー(オンボーディングフロー)を作成し、スキップボタンが必要です。ボタンはviewControllerにあるため、別のviewControllerに移動する最良の方法は、アプリのデリゲートウィンドウにアクセスすることであることがわかりました。
ただし、AppDelegate.Typeには「window」というメンバーがないというエラーが表示され続けます。
@IBAction func skipWalkthrough(sender: AnyObject) {
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
AppDelegate.window!.rootViewController = RootViewController
}
そのようなアプローチには何か問題がありますか?
前もって感謝します!
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
スイフト3
これはより良い方法です:
if let window = NSApplication.shared().windows.first {
window.acceptsMouseMovedEvents = true;
}
インスタンスの代わりにプロトコル名(つまり、AppDelegate
)を使用しています:
する必要があります:
appDelegate.window!.rootViewController = RootViewController
条件付きバインディングを使用して、window
に到達することもできます。
if let window = UIApplication.shared.windows.first {
// use window here.
}
アプリからどこからでもタブバーにアクセスできます。以下を使用:
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
}
}
このソリューションは以下のために機能します:ログイン/登録後、プログラムでUITabbarControllerを追加します
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
appDelegate.window!.rootViewController = tabs //()
appDelegate.window!.makeKeyAndVisible()