2016-05-18 7 views
0

ユーザーが編集を完了して画面の他の部分をタップすると、UITextViewでいくつかの処理を実行したいと思います。ベストプラクティスは何ですか?UITextViewをタップしたときのイベント(つまり、UITextViewのフォーカスが失われています)

私はほとんどfunc textViewDidEndEditing(textView: UITextView)で目的の効果を得ることができましたが、これはキーボードで「Enter」キーをタップしたときにのみ実行されます(非常にまれに - 画面上の他の場所をタップ。

func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?)の問題は、UITextViewが編集されたかどうかは気にしないことです。

答えて

2

私はtextViewを保持するビューにUITapGestureRecognizerを追加できると思います。 UITapGestureRecognizerのセレクタで、ロジックコードを追加してプロセスを処理できます。 textViewのテキストの長さをチェックして、UITextViewが編集されたかどうかを調べることができます。いくつかのサンプルコードを示します:

override func viewDidLoad() { 
    super.viewDidLoad() 

    let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTap)) 
    view.addGestureRecognizer(tapGestureRecognizer) 
} 

func handleTap() { 
    let text = textView.text 
    textView.resignFirstResponder() // loosing focus 

    if text.characters.count > 0 { 
     // textView edited 
    } else { 
     // textView not edited 
    } 
} 
+0

ありがとう! textView.resignFirstResponder()の目的は何ですか? textViewが編集されたかどうかを確認するより堅牢な方法はありますか? – Daniel

+0

textView.resignFirstResponder()の目的は、textViewがカーソルのフォーカスをビューに解放し、必要に応じてキーボードを非表示にすることでした。編集したtextViewを確認する他の方法についてはわかりません。 – EricXuan

関連する問題