質問: 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に変な動きがついてしまいます。 この動きを解決し求める挙動にするためにはどのような解決策があるのでしょうか。 ご教授よろしくお願いいたします。 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/d8109c8812537809ab535b3c17a385ee.png)
回答: 僕が以前やった方法は、キーボードが表示されたら全画面を覆う完全に透明なビューをWindowの一番上に追加し、そのビューのhitTest(_:with:)をオーバーライドして対象のセルの上でのイベントはタッチイベントを下に通過(nilを返す)させ、それ以外は自身でイベントを捕まえてdelegateなりでViewControllerに通知し、キーボードを閉じる(閉じたらそのビューを破棄)、という方法です。 似たような方法ですが、キーボードが表示されたらセルの上下に透明なビューを置いてそのタッチイベントで閉じる、という方法もあります。