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()
    }
}
    
