今回はTable Viewの使用方法についてみていきます。
Xcode:9.2
Swift:4.0.3
Table Viewを使用すると、データをリスト形式で表示することができます。例えば、リマインダーアプリではTable Viewが使用されていることがわかります。
はじめにSingle View Applicationのプロジェクトを作成して、Table Viewを貼り付けます。配置したら、サイズを任意の大きさに変更してください。
2.Table View Cellを配置する
Table Viewに項目を表示する為にはセルが必要です。先ほど配置したTable Viewの上にTable View Cellを1つ配置します。もしくは左側のView Controller SceneのTable Viewの下にTable View Cellをドラッグして配置してもOKです。
3.dataSourceとdelegateの設定
Table Viewのにデータを表示したり操作する為にはdataSourceとdelegateの設定が必要です。
View Controller Sceneの下にあるTable Viewを[control]キーを押しながらドラッグして、View Controllerの上で離します。
すると、メニューが表示されるのでdataSourceを選択します。同様にしてdelegateも選択します。
今度はTable View CellをViewController.swiftから操作できるようにします。
はじめにView Controller SceneにあるTable View Cellを選択します。続いて、Show the Attributes inspectorを選択し、最後にIdentifierに「myCell」よ入力します。ここに入力する名前は「myCell」でなくても構いません。
4.ViewController.swiftへの実装
デザインは以上で完了ですので、ViewController.swiftへのコードの実装をしていきます。
はじめに、セルに表示するデータを準備します。ここでは、ライオン、シマウマ、キリンの3つの文字列を表示するようにするため、override func viewDidLoad()の上あたりに、以下のコードを挿入してください。
let animals = ["ライオン","シマウマ","キリン"]
次に、ViewControllerクラスにdataSourceとdelegateを実装します。以下のようにUIViewControllerの右側に、UITableViewDelegateとUITableViewDataSourceを記述します。
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
すると、エラーが表示されるので[Fix]を押して解決させます。
[Fix]を押すと、以下のように2つのメソッドが実装されます。この2つは必須のメソッドなので、「実装されていないよ」という意味でエラーが表示されていたわけです。
上のメソッドはTable Viewに何個のセルを表示するかを指定するためのものです。animalsのデータ全てが表示できるようにする為に、以下のように編集します。
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return animals.count
}
もう1つのメソッドは、セルに表示する値を設定するためのものです。
// セルに表示する値を設定する
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// データを表示するセルを取得する
let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath)
// セルに表示する値を設定する
cell.textLabel!.text = animals[indexPath.row]
// データを設定したセルを返却する
return cell
}
以上で実装は完了です。実行をしてみると、以下のようにanimalsに設定したデータが一覧となって表示されます。
最後にViewController.swiftの全ソースを以下に示します。
import UIKit
class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
let animals = ["ライオン","シマウマ","キリン"]
// Table Viewにいくつのセルを表示するかを指定する
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return animals.count
}
// セルに表示する値を設定する
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// データを表示するセルを取得する
let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath)
// セルに表示する値を設定する
cell.textLabel!.text = animals[indexPath.row]
// データを設定したセルを返却する
return cell
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
コードはGithubに置いておきます