Irohabook
0
763

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

次の記事

UISplitViewController