UISplitViewControllerのmainViewControllerにUITabBarControllerを接続しています。
このmainViewControllerのタブごとにdetailViewControllerのViewControllerを切り替えるにはどのように実装すべきでしょうか。
StoryBoardのdetailViewControllerには初期状態のViewControllerにつながるようにしてあります。
UISplitViewControllerでUITabBarControllerDelegateを継承して切り替えに反応させて切り替えたいViewControllerを取得するところまではいいのですが反映させる方法がいまいちわかりません。
swift
1class MySplitViewController: UISplitViewController, UITabControllerDelegate { 2 /* 3 * 省略 4 */ 5 6 func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) { 7 var _name: String? 8 switch viewController.childViewControllers[0] { 9 10 case _ as UICollectionViewController: 11 _name = "CollectionTabDetail" 12 13 case _ as UITableViewController: 14 _name = "SettingTabDetail" 15 16 default: 17 NSLog("Unkonwn view controller") 18 abort() 19 20 } 21 if let name = _name { 22 let vc = UIStoryboard(name: name, bundle: nil).instantiateInitialViewController()! 23 // ここで既存のdetailViewControllerから切り替える。 24 } else { 25 abort() 26 } 27 } 28}
self.viewControllers[1]を変更してみたり、いろいろ試したのですが正しく動作しませんでした。
そもそもの実装の仕方がおかしいのでしょうか。
よろしくお願いします。
補足
prefferedDisplayModeのプロパティを.PrimaryHidden
または.PrimaryOvarlay
(masterViewControllerがオーバーレイ表示されるdisplayMode)においては、
swift
1self.viewcontrollers[1] = vc
とすることで期待通りの結果が得られました。
ということはおそらく、UISplitViewControllerのdisplayModeを再定義する必要があると思いました。
ただ、
swift
1self.viewcontrollers[1] = vc 2self.prefferedDisplayMode = .AllVisible
としただけでは反映されませんでした。
displayModeの再描画?をする方法はリファレンスを見る限り見当たりませんでしたがどうやるのでしょうか。
引き続き、よろしくお願い致します。
あなたの回答
tips
プレビュー