1.はじめに
テーブルビューのセルにUITextFieldを設置し、セルのタップでテキストフィールドのキーボードを表示させます。
その際、テキストフィールドをタップしたことによるキーボードの表示は避けます。
なぜかというと、テキストフィールドをタップしてキーボードを表示した場合、セルが選択状態にならないからです。
あくまでもtableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
からキーボードを表示させるのが目的です。
セルの選択契機とテキストフィールドのタップ契機では微妙に見た目が違うので、セルの選択のみを契機としてキーボードを表示させます。
2.テキストフィールドの設定
isUserInteractionEnabled
をfalse
にする。これはstoryboardから設定できます。この設定により、テキストフィールドのタップを無効化します。
canBecomeFirstResponder
をtrue
にする。これによってテキストフィールドでキーボードを表示できるようします。ただ、このプロパティは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() // セルのテキストフィールドでキーボードを表示する
}