ホーム画面から3Dタッチショートカットを使用しているときに、別のView Controllerに分割しようとしています。UITabBarControllerとUINavigationBarControllerに埋め込まれたViewViewControllerの例
アプリケーションはUITabBarController
に組み込まれており、各タブルートコントローラはUINavigationController
です。
ショートカットを処理して各ショートカットのビューコントローラをロードしようとした方法を次に示します。このコードで
private func handleShortcutItem(shortcutItem: UIApplicationShortcutItem) {
if let rootViewController = window?.rootViewController, let shortcutItemType = ShortcutItemType(shortcutItem: shortcutItem) {
let sb = UIStoryboard(name: "main", bundle: nil)
let helloVC = sb.instantiateViewControllerWithIdentifier("HelloVC") as! HelloViewController
let goodbyeVC = sb.instantiateViewControllerWithIdentifier("GoodbyeVC") as! GoodbyeViewController
switch shortcutItemType {
case .Hello:
rootViewController.presentViewController(helloVC, animated: true, completion: nil)
break
case .Goodbye:
rootViewController.presentViewController(goodbyeVC, animated: true, completion: nil)
break
}
}
}
ショートカットは、初期ビューコントローラへとしない別のタブにあるhelloVC
とgoodbyeVC
コントローラにアプリケーションを開きます。
ロードしようとしているViewControllers
がUINavigationController
に埋め込まれ、UITabBarController
に埋め込まれているため、これが原因であると推測しています。
UITabBarController
とUINavigationController
に埋め込まれているpresentViewController
はどうすればいいですか?
UPDATE
私は気圧私と一緒にiPhone 6Sを持っていないように私は次のように動作するかどうか不明です。しかし、コードを次のように変更しました。うまくいけば、3D Touch Actionが実行されたときに選択されたタブインデックスが読み込まれることを願っています。そこから、Segueを実行するための通知をView Controllerに通知する必要があります。
private func handleShortcutItem(shortcutItem: UIApplicationShortcutItem) {
if let rootViewController = window?.rootViewController, let shortcutItemType = ShortcutItemType(shortcutItem: shortcutItem) {
let tababarController = rootViewController as! UITabBarController
switch shortcutItemType {
case .Hello:
tababarController.selectedIndex = 1
NSNotificationCenter.defaultCenter().postNotificationName("performsegueHello", object: nil)
break
case .Goodbye:
tababarController.selectedIndex = 4
NSNotificationCenter.defaultCenter().postNotificationName("performsegueGoodbye", object: nil)
break
}
}
}
あなたはrootViewController.presentViewController(helloVCは、アニメーション:真、完了:ゼロ)ことを確認しまし またはrootViewController.presentViewController(goodbyeVC、アニメーション:真を、完了:ゼロ)が呼び出さなっていますか? – beyowulf
「コーディネーター」パターンと呼ばれるものを調べましたか?モバイルアプリ内でナビゲーションをカプセル化する便利な方法です。 http://iamsim.me/the-coordinator-pattern/ –