中学理科1626207 views
中学英語808712 views
ヒストリア284143 views
高校倫理1433119 views
英語607877 views
中学社会667106 views
中学数学621382 views
MathPython491378 views
世界の国560595 views
高校生物549842 views
Help
Tools

English

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の順に入れる。