LoginSignup
1
3

More than 5 years have passed since last update.

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

Posted at

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()           // セルのテキストフィールドでキーボードを表示する
}
1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3