【Swift】Table View Controllerの使い方。Table Viewとの違いを把握する。(Swift 2.1、XCode 7.2)

2020年6月16日

UITableViewControllerとUITableView

本記事では、UITableView(以下、テーブルビュー)と比較したUITableViewController(以下、テーブルビューコントローラー)の特徴について説明する。

Table View ControllerとTable View

 

Static Cells

テーブルビューに配置できるセルの種類はDynamic Prototypes(動的)とStatic Cells(静的)の2種類がある。Dynamic Prototypesはテーブルビューコントローラーとテーブルビューのどちらも使えるが、Static Cellsはテーブルビューコントローラーだけが使える。

Static Cellsとは、ストーリーボードのみでテーブルに表示するレコードすべてを作ることができるセルの種類のことである。使い方は「Table View Controllerの使い方」の記事を参照されたし。

 

Dynamic Prototypes

Dynamic Prototypesは、ソースコードからテーブルデータの追加、編集、削除を行うセルの種類のことである。テーブルビューのDynamic Prototypesの使い方は「Table Viewの使い方」を参照されたし。

ただし、やろうと思えばStatic Cellsでもテーブルデータの編集を行える。

Dynamic Prototypesを試す

テーブルビューコントローラーのDynamic Prototypesを使ってテーブルを実装してみよう。といってもテーブルビューの場合と似ているので、テーブルビューコントローラーならではの特徴に着目しながら説明する。

ストーリーボードにテーブルビューコントローラーを配置する(下図赤矢印)。続いて、黄緑枠のアトリビュートインスペクタボタンを押して設定画面を表示し、Is Initial View Controllerにチェックを入れる。これでアプリ起動時にテーブルビューコントローラーが起動されるようになった。

最初からあった紫枠のビューコントローラーを選択してDeleteキーで削除する。

Table View Controllerをストーリーボードに配置する。

 

下図赤枠のセルを選択、黄緑枠のアトリビュートインスペクタボタンを押して設定画面を表示し、Identifierに「TestCell」を入力する。これはソースコードからセルにアクセスするための識別子である。

セルの識別子を設定する

 

次にテーブルビューコントローラーのカスタムクラスを作る手順に入る。

メニューから「File」⇒「New」⇒「File…」を選択する。

新規ファイルを作成する。

 

テンプレートを選択する画面が表示されるので、「iOSのSource」⇒「Cocoa Touch Class」を選択する。

Cocoa Touch Classを選択する

 

クラス名を入力する画面が表示されるので、Classに「TestTableViewController」、Subclass ofに「UITableViewController」を入力し、Nextボタンを押す。

Table View Controllerのカスタムクラス名を指定する

 

保存先を指定する画面が表示されるので、プロジェクトと同じ場所であることを確認し、Createボタンを押す。

保存場所を指定する

 

下図赤枠のテーブルビューコントローラーを選択、黄緑枠のアイデンティティインスペクタボタンを押して設定画面を表示し、Classに「TestTableViewController」を設定する。これでテーブルビューコントローラーにカスタムクラスが使われるようになった。

以上でストリーボードでの準備が完了した。テーブルビューコントローラーは最初からData SourceとDelegateが適用されているため設定不要なのが特徴である。

Table View Controllerにカスタムクラスを設定する

 

TestTableViewController.swiftを以下のコードに変更する。

前述したように、UITableViewControllerにはDataSourceとDelegateがすでに適用されているので、サブクラスで適用する必要が無い。

そのため、デリゲートメソッドはUITableViewControllerのメソッドをオーバーライドして実装する必要がある。オーバーライドする以外のメソッドの使い方などはテーブルビューと同じである。

 

以下は実際のプレイ動画

 

clearsSelectionOnViewWillAppearプロパティ

テーブルビューコントローラーにはclearsSelectionOnViewWillAppearプロパティがあり、ビューが表示されるときにテーブルの選択を解除する(true)、または、解除しない(false)を設定できる。

デフォルトはtrueで、以下の動画のようにテーブルを選択して画面遷移をしたあと元の画面に戻るとテーブルのレコード選択が解除される。

 

falseにすると、以下の動画のようにテーブルのレコードは選択されたままになる。

 

検証に使ったXcodeプロジェクトをGitHubに置いたので、試してみる人はご利用されたし。
⇒「テスト用プロジェクト

 

refreshControlプロパティ

テーブルビューコントローラーにはrefreshControlプロパティがあり、このプロパティにUIRefreshControlクラスのインスタンスを設定すると、テーブルビューを下に引っ張ったときにインジケーターを表示できる。

ただし、テーブルビューの部品を使って実装したテーブルにもリフレッシュコントロールを追加することができる。使い方については「Table View Controller その2」の記事を参照されたし

 

以上、「テーブルビューをビューコントローラーに配置する実装」と「テーブルビューコントローラーを使った実装」を比較して、テーブルビューコントローラーをどうしても使いたくなるような優位的な機能は見当たらなかった。

テーブルビューコントローラーを使った場合は画面全体がテーブルになるので、むしろ、テーブルビューをビューコントローラーに配置する実装方法の方が使い易いような気さえする。