モケラ

Tech Sheets

mokelab

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

一覧に戻る