【Swift】UITextField入力後にキーボードのリターンキーで次のUITextFieldに移動する

村上 著者:村上

【Swift】UITextField入力後にキーボードのリターンキーで次のUITextFieldに移動する

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

  • この記事いいね! (0)

著者について

村上

村上 administrator