[iPhone] TextField UIKeyboardType を使う

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

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

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

Swift 4.0
Xcode 9.0

 

UIKeyboardType

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

 

addTarget

 
addTarget を使って文字が入力されるのを検出します
 
ネット上でユーザー登録するケースが多いかもしれませんが、いちいち項目ごとに確定するとは限りません。まとめて「登録」ボタンをタップということを想定します。
 
確定せずに、そのまま次の項目に移ったとしても最終の状態を一時的に確定まで保持していれば大丈夫です。
 
そもそも、numberPad などには確定するキーがありません

 

Keyboardを閉じる

 
キーボードの閉じ方はこちらにあります。ここでは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に重なってしまいます。それを回避することも検討する必要があります。
 
 
関連ページ:


ページのトップへ戻る

シェアする

  • このエントリーをはてなブックマークに追加

フォローする