gpt4 book ai didi

macos - 当 Swift 中 NSTextField 内的文本更改时执行回调

转载 作者:行者123 更新时间:2023-11-30 10:12:10 25 4
gpt4 key购买 nike

我有一个 NSTextField,我想在其中的文本发生变化时执行回调。回调将启用表单底部禁用的“保存”按钮。

到目前为止我所做的是子类 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 文本更改的回调?

编辑

正如马特所指出的那样,子分类和发送通知是愚蠢的。无需对文本字段进行子类化。只需观察 NSTextDidChangeNotification 就足以对我正在寻找的事件使用react。我已经测试过这个,但我在选择器的末尾缺少一个冒号,所以我认为这不是正确的方法。这确实是正确的方法。

最佳答案

您崩溃的原因是您的选择器错误。它应该是 selector: "fieldTextDidChange:" (注意最后的冒号)。

关于macos - 当 Swift 中 NSTextField 内的文本更改时执行回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32376936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com