実装しとくと便利かな?な機能その1。
今回は、TextField にテキストなどを入力後、ソフトウェアキーボードのリターンキーで次の TextField に移動する方法です。
ログインや会員登録などのフォーム画面に実装されていることが多いと思います。
今回参考にさせていただサイトはこちら。
UITextFieldのキーボード操作で使えるTips – Goalist Developers Blog
http://developers.goalist.co.jp/entry/2017/03/16/190535
サンプルコードはこちら。
なお、今回 Storyboard は使用せず、全てコードのみで実装しています。
まずは、テキスト入力欄を作成します。
今回は、ログインフォームをイメージして、名前とパスワードの入力欄を追加しました。
// 名前の入力欄を作成 var name: UITextField = UITextField(frame: CGRect(x: 0, y: 0, width: 200, height: 40)) name.delegate = self name.layer.position = CGPoint(x: self.view.bounds.width/2, y: 200) name.returnKeyType = .next name.tag = 0 self.view.addSubview(name) // パスワードの入力欄を作成 var password: UITextField = UITextField(frame: CGRect(x: 0, y: 0, width: 200, height: 40)) password.delegate = self password.layer.position = CGPoint(x: self.view.bounds.width/2, y: 300) password.isSecureTextEntry = true password.returnKeyType = .Done password.tag = 1 self.view.addSubview(password)
ポイントは、4行目と12行目の .returnKeyType と、5行目と13行目の .tag です。
まず、.returnKeyType でソフトウェアキーボードのリターンキーを「Next」と「Done」の文字に変更しています。
次に、.tag で それぞれの UITextField のタグを指定しています。
なお .tag には数値しか指定できないのでご注意ください。
次に、リターンキーを押した時の処理を追加します。
// リターンキーを押した時の処理
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
switch textField.tag {
case 0:
// タグが 0 なら password にフォーカスを当てる
password.becomeFirstResponder()
break
case 1:
// タグが 1 ならキーボードを閉じる
password.resignFirstResponder()
break
default:
break
}
return true
}
コメントに書いてある通りですが、UITextField のタグが 0、つまり名前入力欄だったら、リターンキーを押した時にパスワード入力欄にフォーカスを当てます。
次に、UITextField のタグが 1、つまりパスワード入力欄だったら、ソフトウェアキーボードを閉じます。
実装するコードは以上です。
以上、UITextField にテキストを入力した後、キーボードのリターンキーで次の UITextField に移動する方法でした。
なお、これらの処理を簡単に実装できる FormChangeable というライブラリもありましたが、私の環境ではエラーが発生してしまったので、今回は採用しませんでした。
個人的な感覚では、ライブラリを使わなくてもそこまで複雑な処理ではないので、自前で実装でも問題ないと思います。