如果我有两个文本视图,如何检查 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
    }
}