2017-08-27 72 views
1

對於我用Xcode/Swift構建的MacOS應用程序,我試圖在NSTextField中的值發生更改(用戶正在鍵入內容)時調用函數。所以我添加了一個通知中心觀察員:將通知中心觀察者添加到特定的NSTextField中 - MacOS

import Cocoa 

class ViewController: NSViewController, NSTextDelegate { 

    @IBOutlet weak var textField: NSTextField! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     NotificationCenter.default.addObserver(self, selector: #selector(textFieldDidChange(_:)), name: Notification.Name.NSTextDidChange, object: nil) 
    } 

    override var representedObject: Any? { 
     didSet { 
     // Update the view, if already loaded. 
     } 
    } 

    func textFieldDidChange(_ notification: Notification) { 
     print(textField.stringValue) 
    } 
} 

這工作正常。但現在我希望它適用於特定的NSTextField,所以我設置對象的觀察者:

NotificationCenter.default.addObserver(self, selector: #selector(textFieldDidChange(_:)), name: Notification.Name.NSTextDidChange, object: textField) 

現在突然不工作了,我似乎無法找出原因。剛開始使用Xcode和Swift。我一直在尋找一個解決方案的所有周末,但大多數的答案我找到適用於iOS應用程序,舊版本的快捷,Objective-C的等

+0

https://stackoverflow.com/q/43371152/2303865 –

回答

0

的問題是,NSTextDidChangeNotificationNSText的通知之一,NSTextField不從NSText繼承。你看到這些通知的原因是因爲NSTextField的使用字段編輯器,它是NSTextView的一個實例,其中的子類NSText,做它的實際編輯,並且通知的object屬性將是字段編輯器而不是原始的NSTextField

如果您註冊接收NSControlTextDidChangeNotification通知,您應該能夠將文本字段指定爲object並使其工作。

相關問題