[iPhone] TextField UIKeyboardType を使う

Photo by freestocks.org on Unsplash

TextFieldで入力を促す時に電話番号であれば数字だけのソフトキーが出てきた方がいいのですが、英字から数字に切り替えるのはユーザーの不満になります。

最初か入力の種類がわかっているのであればそれを指定してしまったがいいでしょう。

Swift 5.1
Xcode 11.3.1

UIKeyboardType

TextFieldでユーザー登録画面などを作る時に意外と簡単にできない事情があります。

  1. 入力に応じたキーボード、名前の後に年齢を入力するなど
  2. ユーザーは入力後に確定を実行するとは限らない
  3. キーボードは自動的には閉じない

例えば、文字、数字、メルアド表記が混在する登録画面のケースを考えてみます。

addTarget

キーボードのタイプは色々な種類がありますが、入力毎にキーボードのタイプを変えるにはUIKeyboardTypeで設定します。


addTarget を使って文字が入力されるのを検出します

ネット上でユーザー登録するケースが多いかもしれませんが、いちいち項目ごとに確定するとは限りません。まとめて「登録」ボタンをタップということを想定します。

確定せずに、そのまま次の項目に移ったとしても最終の状態を一時的に確定まで保持していれば大丈夫です。

そもそも、numberPad などには確定するキーがありません

storyboardの設定

キーボードの閉じ方はこちらを参考にしてください。

UITextField は文字を入力するためのUIですが、キーボードは自動的には閉じません。ここでは、キーボードの閉じる方法を3例紹介します…

 

ここではendEditing(true)
を使うことができますが、まとめてview.endEditing(true)とすることもできます。

それらをふまえて
UITextFieldを4つ、それぞれ
“Name”, “Age”, “Phone”, “E-mail”
の項目をユーザーに入力してもらうことを想定します。

TextFieldの横に、入力を促すためのLabelを追加してもいいのですが
ここはコードでplaceholderを使って、入力してほしい項目を見せます。
これはAndroidでいうところのhitに相当しますが、入力を始めると消えます。

また結果を表示するLabelを4行表示できるように「Lines」を4にします。

storyboardに部品を置いて背景色を薄く入れて見やすくします。

サンプルコード

コードを記述します。

ViewController.swift


storyboardのText Fieldなどを紐付けして完成です。



「Register」ボタンをタップした時に
各項目の最新データをまとめて表示しています



最終的には当然ですがsimulatorではなく実機確認しましょう。

Simulatorの場合、キー入力設定がSoftware Keyboardになっているか確認、
「Hardware」「Keyboard」「Toggle Software Keyboard」です。



ちなみに、emailAddressでのメールキーボードはasciiCapableのほうが適しているのではと思います。

また、このようなUITextFieldをたくさん使うケースでは特に、TextFieldが下から迫り上がるKeyboardに重なってしまいます。それを回避することも検討する必要があります。


関連ページ: