Получить строку выбора (выделенный текст) из NSTextView Objective-C

Как я могу получить строку выбранного текста из NSTextView как NSString?

Ваша помощь очень ценится.


person atomikpanda    schedule 24.12.2012    source источник


Ответы (4)


Поскольку NSTextView является подклассом NSText, вы можете использовать NSText для определения выбранной строки следующим образом:

NSString *selected = [[myTextView string] 
                      substringWithRange:[myTextView selectedRange]];
person Tim    schedule 24.12.2012

NSText может иметь более одного выбора. Проверьте это с помощью TextEditapp: выберите строку с помощью мыши, удерживая нажатой клавишу CMD. Таким образом, вы можете выбрать столько строк, сколько хотите. Поэтому я думаю, что более распространенным решением является использование:

NSArray *ranges = [myTextView selectedRanges];

а затем извлеките строки одну за другой.

person Heinrich Giesen    schedule 25.12.2012
comment
Хороший звонок! Имейте в виду, однако, что это относится только к экземплярам NSTextView, а не только к NSText. См. документация по методу - person Tim; 25.12.2012

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)])
    }
}
person vomi    schedule 19.02.2021

Быстрый

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)
person vauxhall    schedule 24.07.2020
comment
Предупреждение: NSTextView имеет свойство selectedRangeS, так как можно выполнить множественный выбор. Этот код следует адаптировать. - person vomi; 19.02.2021