UITableViewDelegate・UITableViewDataSource

本項では以下二つのプロトコルの主なデリゲートメソッドについて説明します。
※あくまで一部です。

UITableViewDelegate

UITableViewDelegateのデリゲートメソッドは以下の通りです。

デリゲートメソッド名 用途
tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat セルの高さを設定する
tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat ヘッダーの高さを設定する
tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? ヘッダーのビューを設定する
tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) セルが選択された時に処理を実行する

セルの高さを設定する

このメソッドのreturn値がそのままセルの高さになります。
indexPathでsectionとrowを設定することで、各セルの高さを設定できます。
以下のようにすると、高さ50のセルと高さ100のセルを交互に設定できます。

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if indexPath.row % 2 == 0 {
        return 50.0f
    }
    return 100.0f
}

実行結果

ヘッダーの高さを設定する

このメソッドのreturn値がヘッダーの高さになります。
indexPathでsectionとrowを設定することで、各セルの高さを設定できます。
以下のようにすると、一つ目のヘッダーの高さを50、それ以外のヘッダーの高さを100に設定して表示することができます。
※「numberOfSections(in tableView: UITableView) -> Int」メソッドでヘッダーの数を2に設定する必要があります。

// 今回はセクションの数を3に設定
func numberOfSections(in tableView: UITableView) -> Int {
    return 3
}

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    if section == 0 {
        return 50.0f
    } 
    return 100.0f
}

実行結果

ヘッダーのビューを設定する

テーブルビューのセクションの区切りを自分の好きなように変更したいときはこれ。
return値にビューを設定してあげると、それがテーブルビューのセクションの区切りに設定されます。
引数のsectionを使って、どのセクションにどういうビューを設定するか指定することもできます。

// 今回はセクションの数を2に設定
func numberOfSections(in tableView: UITableView) -> Int {
    return 2
}

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let view : UIView = UIView.init(frame: CGRect.init(x: 0, y: 0, width: tableView.frame.size.width, height: tableView.frame.size.height))
    if section == 0 {
        view.backgroundColor = UIColor.red
    }
    else {
        view.backgroundColor = UIColor.cyan
    }
    
    return view
}

実行結果

セルが選択された時に処理を実行する

このメソッドはセルを選択した時に呼ばれます。
セルをタップしたら画面遷移する、などに使われます。
indexPathがあるので、セルを指定することもできます。
今回はタップしたセルの背景色を水色にするという処理をしてみましょう。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    
}

実行結果

1セクション毎のセルの数を設定する

このメソッドは指定したセクションのセルの数を設定します。
引数のsectionを使ってセクション毎にセルの数を設定することができます。


実行結果

セルのレイアウトを設定する

このメソッドはUITableViewのキモになる部分です。
表示するセルを呼び出し、戻り値にUITableViewCellのオブジェクトを設定することでセルに表示します。
indexPathを引数に、どのセクションの何番目のセルにどんなセルを表示するのかを設定できます。


実行結果

セクションの数を設定する

これは単純です。
戻り値に設定した値がセクションの数になります。
例えば、A~Zでそれぞれセクションを作りたいのであれば、戻り値に27を設定します。
このメソッドをコードに書かなかった場合、自動的にセクションの数は「1」に設定されます。


実行結果