2017-08-27 75 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并使其工作。

相关问题