中学英語812728 views
小学理科720872 views
高校化学2928968 views
高校生物552513 views
小学社会311093 views
いろは3019021 views
MathPython499435 views
雑学1473946 views
世界の国566092 views
Computer369216 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の順に入れる。