モケラ

Tech Sheets

mokelab

UITextFieldで、フォーカス移動とキーボードを閉じる操作

最終更新日:2015-05-23

UITextFieldで、次のようなログインフォームを作る機会があるでしょう。

ログインフォーム

この時、次のような動作を実現したくなります。

  • メールアドレス入力後、キーボードのNextボタンをタップしたらパスワード欄にフォーカスを移動させたい
  • パスワード入力後、キーボードのReturnボタンをタップしたらキーボードを閉じたい

これは、次の2ステップで実装します。

  1. ViewControllerにUITextFieldDelegateを追加する
  2. textFieldShouldReturn()を実装する

順にみていきましょう。

ViewControllerにUITextFieldDelegateを追加する

UITextFieldのイベントを受け取るため、ViewControllerにUITextFieldDelegateを追加します。追加したら、viewDidLoad()でメールアドレス用のUITextFieldオブジェクトとパスワード用のUITextFieldオブジェクトにdelegateとして設定します。

class ViewController: UIViewController, UITextFieldDelegate {
    @IBOutlet var emailEdit : UITextField?;
    @IBOutlet var passwordEdit : UITextField?;

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        emailEdit?.delegate = self;
        passwordEdit?.delegate = self;
    }
}

textFieldShouldReturn()を実装する

このイベントは、UITextFieldのNextやReturnがタップされた時に呼ばれます。ここでフォーカス移動やキーボードを閉じる処理を書けばOKということになります。フォーカスを当てるには該当ViewのbecomeFirstResponder()を、キーボードを閉じるにはresignFirstResponder()を呼びます。

    func textFieldShouldReturn(textField: UITextField) -> Bool{
        if (textField == emailEdit) {
            passwordEdit?.becomeFirstResponder()
        } else {
            // キーボードを閉じる
            textField.resignFirstResponder()
        }
        return true
    }

一覧に戻る