UITextFieldで、フォーカス移動とキーボードを閉じる操作
最終更新日:2015-05-23
UITextFieldで、次のようなログインフォームを作る機会があるでしょう。
この時、次のような動作を実現したくなります。
- メールアドレス入力後、キーボードのNextボタンをタップしたらパスワード欄にフォーカスを移動させたい
 - パスワード入力後、キーボードのReturnボタンをタップしたらキーボードを閉じたい
 
これは、次の2ステップで実装します。
- ViewControllerにUITextFieldDelegateを追加する
 - 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
    }
    

