実装しとくと便利かな?な機能その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 というライブラリもありましたが、私の環境ではエラーが発生してしまったので、今回は採用しませんでした。
個人的な感覚では、ライブラリを使わなくてもそこまで複雑な処理ではないので、自前で実装でも問題ないと思います。