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
}