2017-01-12 11 views
1

は、私はこのようなNSViewControllerのデリゲートを登録しようとした:テキストフィールドは、その内容を変更した場合NSViewController委任

class ViewController: NSViewController , NSTextFieldDelegate{ 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     textfield.delegate = self 
    } 

    override var representedObject: Any? { 
     didSet { 
     // Update the view, if already loaded. 
     } 
    } 
    @IBOutlet weak var textfield: NSTextField! 

    func textDidChange(_ notification: Notification) 
    { print ("text did change ") 
    } 
} 

FUNCをtextDidChangeは、呼び出されません。ストーリーボードで

私は、次の接続をした:

enter image description here

+0

テキストフィールドが 'textfield'アウトレットに接続されていることは確かですか? – Caleb

+0

私はやったと思います。上記のスクリーンショットを追加しました。 – mica

答えて

2

textDidChangeNSTextFieldDelegateの一部ではない、それはNSTextDelegateの一部だし、それは一般的にNSTextView秒、ないNSTextField秒間使われています。

NSTextFieldDelegateは、controlTextDidChangeを含むNSControlTextEditingDelegateを採用しています。これはあなたが探しているものです。

override func controlTextDidChange(_ obj: Notification) { 
    print("text did change") 
} 

あなたはストーリーボードコンセントを経由して、またはコードのいずれかを介してデリゲートを設定することができますが、あなたは(私はかつてのを好むが、それは優れている、完全に主観です)の両方を行う必要はありません。

+0

thx、作品。デリゲートを2倍に設定するのは問題ですか? – mica

+0

いいえ、デリゲートを2回設定しても何も問題はありません。最悪の場合:ある時点で、代理人を何かに変更することを決心し、一方の場所で代理人を変更した後、それが正しく機能しない理由を突き止めるために何時間も費やすだけです。 – zpasternack