NSTextView に文字が入力されるたびに変更を検出する
Cocoa プログラミング
NSTextView に何か文字が入力される度に検出して、そのタイミングで任意の処理を行う方法を調べてみました。
OS X の NSTextView
 で、文字が入力されてテキストの内容が変化するたびに、それを検出して何らかの処理を行えるようにしてみます。
そのためには NSTextViewDelegate
 が継承している NSTextDelegate
 を使います。
NSTextViewDelegate に対応させる
今回は ViewController
 で NSTextView
 の変更を検出しようと思うので、まずはこのクラスに NSTextViewDelegate
 を適用します。
extension ViewController : NSTextViewDelegate {
	func textDidChange(notification: NSNotification) {
		// ここで変更された NSTextView を受け取れます。
		let textView = notification.object as! NSTextView
		
	}
}
そして、こうして textDidChange
 を実装して、テキストが変更されたときに実行する処理を記載します。
NSTextView にデリゲートを設定して準備完了
そうしたら先ほど NSTextViewDelegate
 を適用したクラスを、目的の NSTextView
 の delegateプロパティ
 に設定します。
 
これで NSTextView
 の内容が変更されるたびに delegate
 で指定したインスタンスの textDidChange
 メソッドが呼び出されるようになりました。
複数の NSTextView を扱う場合
複数の NSTextView
 の delegate
 に同じインスタンスが設定されている場合、そのうちのどのオブジェクトが変更されても同じ textDidChange
 メソッドが呼び出されるので注意が必要です。
そのような場合は次のようにして、どのオブジェクトの変更が検出されたかを判定してから処理する必要があるかもしれません。
func textDidChange(notification: NSNotification) {
	switch notification.object {
            
	case let textView as NSTextView where textView === self.targetTextView1:
		// Do Something
	case let textView as NSTextView where textView === self.targetTextView2:
		// Do Something
	default:
		fatalError()
	}
}