在带有两个 NSTextView 的 macOS 应用程序中,我试图检查 textView 何时更改,到目前为止我已经这样做了:
class ViewController: NSViewController, NSTextViewDelegate {
@IBOutlet var mainTextField: NSTextView!
@IBOutlet var findPanelFindTextView: NSTextView!
func textDidChange(_ notification: Notification) {
print("Hello!") // works only with mainTextField
}
override func viewDidLoad() {
super.viewDidLoad()
mainTextField.delegate = self // for textDidChange
findPanelFindTextField.delegate = self // for textDidChange
}
}
只有第一个 NSTextView (mainTextField) 触发方法 textDidChange。
我已经看到这个问题了Check if NSTextView has been edited该实现适用于我的第一个 textView 但不适用于我的第二个 textView。
最佳答案
除了你写了 findPanelFindTextField 但它应该是 findPanelFindTextView 之外,你应该检查发布通知的对象,从它创建一个 textView 对象但是将它从 Any
转换为 NSTextView
然后创建一个开关来检查哪个 textview 正在发布通知:
@IBOutlet var mainTextView: NSTextView!
@IBOutlet var findPanelFindTextView: NSTextView!
override func viewDidLoad() {
super.viewDidLoad()
mainTextView.delegate = self
findPanelFindTextView.delegate = self
}
func textDidChange(_ notification: Notification) {
guard let textView = notification.object as? NSTextView else { return }
switch textView {
case mainTextView:
print("mainTextView changed")
case findPanelFindTextView:
print("findPanelFindTextView changed")
default:
break
}
}
关于swift - 如果我有两个 TextView ,如何检查 NSTextView 何时更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47735422/