UITableViewのセルをタップした時のアクションを実装する方法を解説します。
環境
この記事の情報は次のバージョンで動作確認しています。
【Swift】4.2.1
【iOS】12.1.3
【macOS】High Sherra バージョン 10.13.6
はじめに
UITableViewの基本的な使い方については、別の記事で解説していますので、1から知りたい方はこちらをご覧下さい。
当記事の解説は、この記事に従ってUITableViewが実装されている事が前提となっています。
アクションの実装
UITableViewのセルがタップされると、次に示すようなdidSelectRowAtメソッドが呼ばれますので、ここに必要なアクションを実装していきます。
1 2 3 4 5 6 |
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { // アクションを実装 } |
didSelectRowAtはUITableViewDelegateプロトコルで定義されているメソッドになりますので、ViewControllerクラスに記述して下さい。
実装例1:タップされたセルの行番号を取得する
1 2 3 4 5 6 7 |
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { // タップされたセルの行番号を出力 print("\(indexPath.row)番目の行が選択されました。") } |
タップされたセルの行番号を取得してデバッグログに出力する例です。indexPath.rowはタップされた行番号を返します。
実装例2:タップされたら別の画面に遷移する。
1 2 3 4 5 6 7 8 9 10 |
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { // セルの選択を解除 tableView.deselectRow(at: indexPath, animated: true) // 別の画面に遷移 performSegue(withIdentifier: "toNextViewController", sender: nil) } |
Segueを使って、別の画面に遷移する実装例です。
実装例1を動かしてみた方はお気づきかと思いますが、タップされた行は標準では選択状態のままになっています。そこで、この実装例2では、別の画面に遷移する前に、選択状態を解除する処理を入れています。選択状態にしておく必然性が無い場合にこの処理が無いとAppleの審査に落ちる事があるようです。
尚、Segueを使った画面遷移についてはこちらの記事で解説していますので、必要な方は合わせてご覧くさい。
参考情報
UITableViewのセルがタップされた時に、実は本記事で紹介したdidSelectRowAt以外にも、いくつかのメソッドが呼ばれます。ここでは、それらのメソッドを紹介しておきます。今は何に使うかわからなくても、頭の片隅においておけば将来何かの役にたつかもしれません。
あるcellがタップされた際は以下の順にメソッドが呼ばれます。
shouldHighlightRowAt : ハイライトするかどうか指定
didHighlightRowAt : ハイライトした際に呼ばれる
didUnhighlightRowAt : アンハイライトした際に呼ばれる
willSelectRowAt : 選択状態にするかどうか指定、別のcellを選択させる事もできる
didSelectRowAt : 選択状態にされた際に呼び出される