#author("2017-01-20T20:37:49+09:00","default:wikiwriter","wikiwriter") #author("2017-01-20T20:38:19+09:00","default:wikiwriter","wikiwriter") [[UIKit]] &tag(UIKit/スプリットビュー); *目次 [#tcc6d6e4] #contents *関連ページ [#oa05efb8] *参考情報 [#ye6d5218] -[[Master-Detail Applicationテンプレートを実用的なところまでカスタマイズ! - Qiita:http://qiita.com/Kta-M/items/a62a714aa7657d312600]] -[[UISplitViewController あれこれ | hirooka.pro:https://hirooka.pro/?p=8105]] *概要 [#x719f9a1] -Master Detailテンプレートで作成すると、UISplitViewControllerを使用したサンプルプログラムが作成できる。 -iPadのとき分割ビューになるほか、iPhone 6/6s/7 PlusなどのPlusの横画面で分割表示となる。 #ref(splitview.jpg,50%) #ref(./splitview.jpg,50%) *素から導入する [#y68cf2f3] **作成するプログラム [#wfe9f3c2] -Single ViewアプリケーションからSplit View Controllerを利用して、Master Detail風のプログラムを自力で作成する。 -iPhoneの場合は、ナビゲーションコントローラーを使った風に。iPhone Plusの横画面とiPadの場合は分割表示とする。 -初期状態は2分割表示可能な場合は同時表示、だめなときはマスター。 **手順 [#ffbb36bd] -MasterViewControllerとDetailViewControllerを追加。両方ともUITatleViewControllerのサブクラスとする。 -Spit View Controllerをドロップ。そこに矢印をつける。 -Detail側のビューコントローラーを削除。Table View Controllerを追加してナビゲーションバーをつける。 -Split View ControllerをCtrlドロップしてrelationで接続ずけ。マスター側のView Controllerから詳細側のナビゲーションコントローラーに関連づけ(show Datail)。 --[[swift Segueの種類について - スタック・オーバーフロー:http://ja.stackoverflow.com/questions/17290/swift-segue%E3%81%AE%E7%A8%AE%E9%A1%9E%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6]] -それぞれのView ControllerのクラスをMasterViewControllerとDetailViewControllerにしておく。 **作り込み [#rdc8a774] ***常に2ペイン表示 [#xc149a94] -AppDelegateを修正。 #pre{{ func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. let splitViewController = self.window!.rootViewController as! UISplitViewController splitViewController.delegate = self splitViewController.preferredDisplayMode = .allVisible return true } }} ***Master側を優先 [#k17c48f6] -UISplitViewControllerDelegateを利用する。正確にはセカンダリをcollapseするかどうかの判断をするものらしい。 -同じくAppDelegeteに実装。 #pre{{ func splitViewController(_ splitViewController: UISplitViewController, collapseSecondary secondaryViewController:UIViewController, onto primaryViewController:UIViewController) -> Bool { return true } } }}