いろは2993462 views
高校生物550226 views
中学社会667457 views
英語609347 views
MathPython493120 views
小学算数1196702 views
LaTeX958345 views
教育149067 views
高校化学2915516 views
高校物理158628 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の順に入れる。