iOS
Swift

【Swift】UITableViewのセルのタップでキーボードを表示する

1.はじめに

テーブルビューのセルにUITextFieldを設置し、セルのタップでテキストフィールドのキーボードを表示させます。

その際、テキストフィールドをタップしたことによるキーボードの表示は避けます。

なぜかというと、テキストフィールドをタップしてキーボードを表示した場合、セルが選択状態にならないからです。

あくまでもtableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) からキーボードを表示させるのが目的です。

セルの選択契機とテキストフィールドのタップ契機では微妙に見た目が違うので、セルの選択のみを契機としてキーボードを表示させます。

2.テキストフィールドの設定

isUserInteractionEnabledfalse にする。これはstoryboardから設定できます。この設定により、テキストフィールドのタップを無効化します。

canBecomeFirstRespondertrue にする。これによってテキストフィールドでキーボードを表示できるようします。ただ、このプロパティはget onlyのため、テキストフィールドを継承したサブクラスを定義し、そこで設定します。

class TextFieldSub: UITextField {

override var canBecomeFirstResponder: Bool {
return true
}
}

3.セルの選択時にキーボードを表示する

あとはUITableViewDelegate のメソッドでセルのタップを捕まえてキーボードを表示するだけです。

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

let cell = tableView.cellForRow(at: indexPath) // 選択したセルの取得
cell.textField.becomeFirstResponder() // セルのテキストフィールドでキーボードを表示する
}