如果我有两个文本视图,如何检查 NSTextView 何时更改?
How do I check when a NSTextView changes if I have two text views?
在带有两个 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
并且然后创建一个开关来检查哪个文本视图正在发布通知:
@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
}
}
在带有两个 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
并且然后创建一个开关来检查哪个文本视图正在发布通知:
@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
}
}