我试着像这样为 NSViewController 注册一个委托(delegate):
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。
在 Storyboard 中,我建立了以下联系:
最佳答案
textDidChange
不属于 NSTextFieldDelegate
, 它是 NSTextDelegate
的一部分, 它通常用于 NSTextView
s,不是 NSTextField
NSTextFieldDelegate
采用NSControlTextEditingDelegate
, 包括 controlTextDidChange
,这就是您要查找的内容。
override func controlTextDidChange(_ obj: Notification) {
print( "text did change" )
}
请注意,您可以通过 Storyboard outlet 或代码设置代理,但您不需要同时执行这两种操作(我更喜欢前者,但它完全是主观的,后者更好)。
关于swift - NSViewController 委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41623291/