确定当前选定的文本

时间:2017-11-03 02:00:17

标签: macos cocoa notifications

此代码位于NSWindowController的子类中:

@objc func textViewDidChangeSelection(_ notification: Notification) {
    // Show the previous (not current) selection range
    if let stuff = notification.userInfo {
        var i = 0
        for (key, value) in stuff {
            print("\(i) key=\(key) value=\(value)")
            i += 1
        }
    }
}

override func windowWillLoad() {
    NotificationCenter.default.addObserver(self,
        selector: #selector(self.textViewDidChangeSelection(_:)),
        name: NSTextView.didChangeSelectionNotification,
        object: nil)
}

通知中两个字典条目的值提供与先前文本选择对应的范围。如何在发出通知时知道当前文本选择?

2 个答案:

答案 0 :(得分:0)

文本视图(NSTextView)是通知的对象。文本字段是文本视图的委托。

答案 1 :(得分:0)

如果“notes”是NSTextField,那么这将给出当前选定的范围:

        if let sr = notes.currentEditor()?.selectedRange {
            Swift.print("sr = \(sr.location) \(sr.length)")
        }

很难通过现有文档发现这一点。