質問: SwiftにてTextField を画面いっぱいに 広げ どこをタップしてもキーボードが立ち上がるようにすることは可能でしょうか ?
回答: 「どこをタップしてもキーボードが立ち上がるようにする」が、質問の主旨であるという前提で、回答をいたします。 「キーボードが立ち上がる」というアプリの挙動は、プログラマ側から見れば、**`UITextView`、`UITextField`などの、ユーザがテキスト入力を行うViewに、フォーカスが当たる**という表現になります。それをコードで表現すると、こうなります。仮に`UITextField`のインスタンス`textField`に入力のフォーカスを当てる場合、 ``` textField.becomeFirstResponder() ``` とコードを書きます。 キーボードを閉じる時、入力のフォーカスが、`textField`にあるとすると、 ``` textField.resignFirstResponder() ``` と書くのは、よく知られたTipsですが、それと対をなすメソッドということができるでしょう。 さて、次に「どこをタップしても」の部分について考えてみようと思います。 これについては、**Responder Chain**という、UIKitに含まれる機能について、学習する必要があります。 Article - Using Responders and the Responder Chain to Handle Events (以下は、上のリンク先をひととおり目を通された前提で、話を進めます) ユーザが起こしたタッチイベントが、Viewの間を次々に伝播していくのが、Responder Chainのメカニズムですが、iOSの場合、最初にユーザのタッチイベントを受け取った、ボタン、スイッチ、Text Fieldなどが、処理をしてしまうので、「イベントの伝播」が生じないケースがほとんどです。なので、Responder Chainをよく知らない、あるいはまったく知らない人が多いのは、しかたないかも知れませんが、今回のケースでは、大事なポイントです。 ユーザのタッチイベントは、それを受け取って、処理するViewがなければ、次々と伝播していって、`UIViewController`のサブクラスに到達します。これは、つまり`UIViewController`のサブクラスに、ユーザのタッチイベントを受け取って処理するメソッド(`func touchesBegan(_ touches: Set, with event: UIEvent?)`など)を記述しておけば、画面上のどこをタップしても、そのメソッドが実行されるということでもあります。 以上、`becomeFirstResponder()`と、Responder Chainの二つを組み合わせます。 `UIViewController`のサブクラスに、次のコードを記述します。仮に`UITextField`のインスタンスを`textField`とすると、 ``` override func touchesBegan(_ touches: Set, with event: UIEvent?) { textField.becomeFirstResponder() } ```