現在、以下の図のようにTableViewのスタイルをGroupedにし、Labelと右側にTextFieldをセットしたカスタムセルを利用しています。
・求める挙動
Cell以外の部分をタップした時にkeyboardを非表示にする。
この時、keyboardが表示している時にCellをタップした時にkeyboardが表示されたままにする。(現状、一瞬keyboardが閉じる挙動をしてから表示される)
・現在の挙動
Cell以外の部分をタップした時はkeyboardを非表示にすることはできるが、keyboardが表示中にCellをタップすると表示されているkeyboardが一瞬閉じる挙動を示してその後にkeyboardが表示される。
・現在の手法
以下のコードのようにview
にkeyboardを閉じる処理をするUITapGestureRecognizer
を登録している
override func viewDidLoad() { // 省略 // self.viewに画面をタップした時にkeyboardを閉じる処理をするUITapGestureRecognizerを登録している let closeKeyboardTap = UITapGestureRecognizer(target: self, action: #selector(closeKeyboard)) closeKeyboardTap.cancelsTouchesInView = false closeKeyboardTap.delegate = self self.view.addGestureRecognizer(closeKeyboardTap) } @objc func closeKeyboard() { self.view.endEditing(true) } extension CreateTimeTableViewController: UITableViewDelegate { func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let cell = tableView.cellForRow(at: indexPath) as! InputTableViewCell cell.inputTextField.becomeFirstResponder() } }
しかし、この手法だとCellをタップした時に、まず登録しているcloseKeyboard()
が呼ばれてしまいself.view.endEditing(true)
でkeyboardが閉じる処理がされた後にUITableViewDelegate
のfunc tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
内のcell.inputTextField.becomeFirstResponder()
が呼ばれてkeyboardが表示されるのでkeyboardに変な動きがついてしまいます。
この動きを解決し求める挙動にするためにはどのような解決策があるのでしょうか。
ご教授よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。