雑学1473531 views
高校日本史190487 views
いろは3008160 views
世界の国563969 views
りんご207535 views
高校化学2922839 views
LaTeX961590 views
中学英語811280 views
中学理科1630106 views
高校生物551532 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の順に入れる。