中学社会667457 views
中学英語809495 views
小学算数1196702 views
高校国語786245 views
ヒストリア285688 views
数学講師2862298 views
Computer365920 views
高校化学2915516 views
高校物理158628 views
小学社会308942 views

SwiftでUISplitViewControllerを使う(ストーリーボードなし)

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を使う。

画面を2つに分けて、左にマスター画面、右に詳細画面をのせる場合、次のコードが基本になる。…self.viewControllers = [aaa, bbb]、self.preferredDisplayMode = .allVisible…インスタンスをself.viewControllersに入れるときはMaster、Detailの順に入れる。