swift - 如果我有两个 TextView ,如何检查 NSTextView 何时更改?

标签 swift macos delegates nstextview

在带有两个 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/

相关文章:

ios - 自定义导航栏中返回图标和文本的间距和格式

ios - Storyboard 中有 IBOutlet 连接内容 ScrollView 时崩溃

ios - 围绕 iOS 中的对象展开思考

android - MAC机器eclipse IDE中的Selendroid ANDROID_HOME路径问题

macos - 如何在核心数据中存储非标准持久属性(例如 NSRect)?

ios - 哪个委托(delegate)方法在单击时触发 CLLocationManager 不允许

c# - ILGenerated 方法中的 System.ObjectDisposedException

Swift 类属性更新

java - 如何在 Mac OS X Snow Leopard 上安装 JDK 8?

c# - 如果不使用 lambda 表达式,这个 Parallel.ForEach 循环将如何完成?