UITextFieldで、フォーカスがあたったときのイベントを実装する
最終更新日:2016-01-10
UITextFieldで、フォーカスがあたり、キーボードが表示されたことを検知したい場合は、次の2ステップで実装します。
- ViewControllerにUITextFieldDelegateを追加する
- textFieldDidBeginEditing()を実装する
class ViewController: UIViewController, UITextFieldDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// became first responder
func textFieldDidBeginEditing(textField: UITextField) {
NSLog("got focus");
}
}
使い道は?
例えば、UITapGestureRecognizerを使って、背景タップでキーボードが閉じるような動作を実装する場合があります。フォーカスがあたっている時のみ、タップでキーボードが閉じるようにしないと、UITapGestureRecognizerが他のタップ動作を奪ってしまいます。
class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet var keyboardCloseGesture : UITapGestureRecognizer?
@IBOutlet var nameEdit : UITextField?
// 中略
// 入力開始
func textFieldDidBeginEditing(textField: UITextField) {
self.keyboardCloseGesture?.enabled = true
}
// フォーカスが外れた
func textFieldDidEndEditing(textField: UITextField) {
self.keyboardCloseGesture?.enabled = false
}
// 背景部分がタップされた
@IBAction func closeKeyboard(sender: AnyObject) {
self.nameEdit!.resignFirstResponder()
}
}