从NSTextView Objective-C获取选择(高亮显示的文本)字符串



如何从NSTextView获得选定文本的字符串作为NSString ?

非常感谢您的帮助

一个NSText可以有多个选择。用TextEditapp检查一下:在按CMD时用鼠标选择一个字符串。你可以选择任意多的字符串。因此,我认为,更常见的解决方案是使用:

NSArray *ranges = [myTextView selectedRanges];

由于NSTextView是NSText的一个子类,你可以使用NSText实例方法来计算所选择的字符串,如下所示:

NSString *selected = [[myTextView string] 
                      substringWithRange:[myTextView selectedRange]];

Swift 5,处理NSTextView的多个选择基于@vauxhall的回答

extension NSTextView {
    var selectedText: String {
        var text = ""
        for case let range as NSRange in self.selectedRanges {
            text.append(string[range]+"n")
        }
        text = String(text.dropLast())
        return text
    }
}
extension String {
    subscript (_ range: NSRange) -> Self {
        .init(self[index(startIndex, offsetBy: range.lowerBound) ..< index(startIndex, offsetBy: range.upperBound)])
    }
}

Swift

extension NSTextView {
    var selectedText: String {
        string[selectedRange()]
    }
}
extension String {
    subscript (_ range: NSRange) -> Self {
        .init(self[index(startIndex, offsetBy: range.lowerBound) ..< index(startIndex, offsetBy: range.upperBound)])
    }
}
使用

let textView = NSTextView()
print(textView.selectedText)

最新更新