[Swift]リターンキーが押されたら次の入力欄へ移動する

入力欄が複数ある画面で、リターンキーをタップして次の入力欄へ移動する処理を調べたのでメモ。

入力欄の設定

以下のように、入力欄が2つあり、メールアドレスの入力欄でリターンキーをタップすると、次のパスワード入力欄にフォーカスが移動するようにする。

設定したい入力欄(ログインIDの入力欄)を選択し、inspecotrからtagを設定する。

フォーカスさせる順番に、1,2,3と設定する。

Delgate

リターンキーが押されたイベントを検知するために、クラスにUITextFieldDelegateを追加する。

1
2
class ViewController: UIViewController, UITextFieldDelegate {
  ...

ロード時のコード内で判定するテキストフィールドのdelegateを自身に設定する。

1
2
3
4
override func viewDidLoad() {
  super.viewDidLoad()
  login_txt.delegate = self
}

ここまで設定すると、リターンキーが押された時に、textFieldShouldReturnの関数が自動で実行されるようになる。

1
2
3
func textFieldShouldReturn(textField: UITextField) -> Bool {
  //リターンキーが押された時に実行される
}

フォーカスの移動

これは以下の記事を使わせてもらった。
ios アプリのテキスト入力で次のテキストボックスにサクッと移動する方法

1
2
3
4
5
6
7
8
9
10
func textFieldShouldReturn(textField: UITextField) -> Bool {
    // 今フォーカスが当たっているテキストボックスからフォーカスを外す
    textField.resignFirstResponder()
    // 次のTag番号を持っているテキストボックスがあれば、フォーカスする
    let nextTag = textField.tag + 1
    if let nextTextField = self.view.viewWithTag(nextTag) {
        nextTextField.becomeFirstResponder()
    }
    return true
}

完成

これでリターンキーが押された時に指定した入力欄にフォーカスが移動出来るように設定出来た。

参考

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