Swift 中的 NSTextField 中的文本更改时执行回调
Execute callback when text changes inside a NSTextField in Swift
我有一个 NSTextField,我想在其中的文本发生变化时执行回调。回调将启用表单底部禁用的 "save" 按钮。
到目前为止我设法做的是 sub-class NSTextView 以覆盖 textDidChange(notification)
import Cocoa
class MyTextField: NSTextField {
override func textDidChange(notification: NSNotification) {
super.textDidChange(notification)
}
}
在那之后,我没能在我的 ViewController
中执行一个函数。我尝试使用 NSNotificationCenter
来触发某种我可以在 ViewController
中捕获的全局事件,如下所示:
//MyTextField.swift
import Cocoa
class MyTextField: NSTextField {
override func textDidChange(notification: NSNotification) {
NSNotificationCenter.defaultCenter().postNotification(notification)
super.textDidChange(notification)
}
}
//ViewController.swift
import Cocoa
class ViewController: NSViewController {
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "fieldTextDidChange:", name: "NSTextDidChangeNotification", object: nil)
}
override func viewDidAppear() {
super.viewDidAppear()
}
func fieldTextDidChange(notification: NSNotification) {
print(notification, appendNewline: true)
}
}
但是在字段中输入时出现运行时错误:Thread 1: EXC_BAD_ACCESS (code=2, address=0x7fff5f3fff70)
在调用 postNotification()
的行中
如何在 NSTextField 的文本更改时触发回调?
编辑
Sub-class发送通知是愚蠢的,正如 matt 所指出的。无需子 class 文本字段。只需观察 NSTextDidChangeNotification
就足以对我正在寻找的事件做出反应。
我已经对此进行了测试,但在此之上的选择器末尾缺少一个冒号,因此我认为这不是正确的方法。确实是正确的方法。
您崩溃的原因是您的 selector
错误。它应该是 selector: "fieldTextDidChange:"
(注意最后一个冒号)。
我有一个 NSTextField,我想在其中的文本发生变化时执行回调。回调将启用表单底部禁用的 "save" 按钮。
到目前为止我设法做的是 sub-class NSTextView 以覆盖 textDidChange(notification)
import Cocoa
class MyTextField: NSTextField {
override func textDidChange(notification: NSNotification) {
super.textDidChange(notification)
}
}
在那之后,我没能在我的 ViewController
中执行一个函数。我尝试使用 NSNotificationCenter
来触发某种我可以在 ViewController
中捕获的全局事件,如下所示:
//MyTextField.swift
import Cocoa
class MyTextField: NSTextField {
override func textDidChange(notification: NSNotification) {
NSNotificationCenter.defaultCenter().postNotification(notification)
super.textDidChange(notification)
}
}
//ViewController.swift
import Cocoa
class ViewController: NSViewController {
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "fieldTextDidChange:", name: "NSTextDidChangeNotification", object: nil)
}
override func viewDidAppear() {
super.viewDidAppear()
}
func fieldTextDidChange(notification: NSNotification) {
print(notification, appendNewline: true)
}
}
但是在字段中输入时出现运行时错误:Thread 1: EXC_BAD_ACCESS (code=2, address=0x7fff5f3fff70)
在调用 postNotification()
如何在 NSTextField 的文本更改时触发回调?
编辑
Sub-class发送通知是愚蠢的,正如 matt 所指出的。无需子 class 文本字段。只需观察 NSTextDidChangeNotification
就足以对我正在寻找的事件做出反应。
我已经对此进行了测试,但在此之上的选择器末尾缺少一个冒号,因此我认为这不是正确的方法。确实是正确的方法。
您崩溃的原因是您的 selector
错误。它应该是 selector: "fieldTextDidChange:"
(注意最后一个冒号)。