UISplitViewControllerは
アイテム | 内容 |
---|---|
Master | テーブル、リスト、選択画面 |
Detail | 内容、詳細 |
の2つからなる。
基本的なコード
画面を2つに分けて、左にMaster、右にDetailをのせる場合、次のコードが基本になる。ここではAccountSplitViewControllerという画面をスプリットにした。
class AccountSplitViewController: UISplitViewController, UISplitViewControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let aaa = AAAViewController()
let bbb = BBBViewController()
let master = UINavigationController(rootViewController: aaa)
let detail = UINavigationController(rootViewController: bbb)
self.viewControllers = [master, detail]
self.preferredDisplayMode = .allVisible
}
}
UISplitViewControllerを継承するクラスそのものはとりあえず無視。その中に入れるクラスをインスタンスにする。
let aaa = AAAViewController()
let bbb = BBBViewController()
そのインスタンスをナビゲーションコントローラーのルートに入れる。そのナビゲーションコントローラーのインスタンスをself.viewControllersに入れておしまい。Master、Detailの順に入れる。
preferredDisplayModeをallVisibleにすると画面が左右に表示される。
Masterはテーブルビューにする
UISplitViewControllerを使うときは、画面左は項目を選ぶ画面(Master)になる。Masterは一般的にテーブル構造になっている。
Masterの項目を押して、違うDetailを表示する
ここが大きなポイントになる。Masterの実体はテーブルであり、セルのイベントはdidSelectRowAtで行う。didSelectRowAt内部に、そのセルをタッチしたときDetailに表示されるViewControllerを定義する。
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if indexPath.row == 0 {
let aaa = AAAViewController()
self.splitViewController?.showDetailViewController(aaa, sender: nil)
}
if indexPath.row == 1 {
}
if indexPath.row == 2 {
}
}
表示するときはUISplitViewControllerのshowDetailViewControllerを使う。