Как преобразовать объект UITextRange
в объект NSRange
? Я видел много сообщений SO о том, чтобы пойти в другом направлении, но это противоположно тому, что мне нужно. Я использую UITextRange
selectedTextRange
, который является свойством UITextView
. Он возвращает UITextRange
, но мне нужен диапазон.
Преобразование selectedTextRange UITextRange в NSRange
Ответы (4)
Вам нужно что-то вроде этого:
- (NSRange) selectedRangeInTextView:(UITextView*)textView
{
UITextPosition* beginning = textView.beginningOfDocument;
UITextRange* selectedRange = textView.selectedTextRange;
UITextPosition* selectionStart = selectedRange.start;
UITextPosition* selectionEnd = selectedRange.end;
const NSInteger location = [textView offsetFromPosition:beginning toPosition:selectionStart];
const NSInteger length = [textView offsetFromPosition:selectionStart toPosition:selectionEnd];
return NSMakeRange(location, length);
}
person
Vitaly S.
schedule
15.01.2014
Вот расширение Swift, основанное на ответе Виталия С.
extension UITextInput {
var selectedRange: NSRange? {
guard let range = self.selectedTextRange else { return nil }
let location = offsetFromPosition(beginningOfDocument, toPosition: range.start)
let length = offsetFromPosition(range.start, toPosition: range.end)
return NSRange(location: location, length: length)
}
}
Свифт 4
extension UITextInput {
var selectedRange: NSRange? {
guard let range = selectedTextRange else { return nil }
let location = offset(from: beginningOfDocument, to: range.start)
let length = offset(from: range.start, to: range.end)
return NSRange(location: location, length: length)
}
}
person
Daniel Wood
schedule
06.08.2016
UITextView
имеет свойство
@property(nonatomic) NSRange selectedRange;
person
yasirmturk
schedule
17.06.2014
Это не отвечает на вопрос ОП. Есть веские причины, по которым вам нужно преобразовать
UITextRange
в NSRange
.
- person Stunner; 01.03.2015
Кроме того, он не существует в быстром
- person Daniel; 09.02.2016
Кроме того, UITextField имеет только
selectedTextRange
, поэтому вам нужно преобразовать его в простой NSRange
.
- person Leslie Godwin; 24.08.2020
Свифт 5
extension UITextInput
{
var selectedRange: NSRange?
{
if let selectedRange = self.selectedTextRange
{
return NSMakeRange(self.offset(from: self.beginningOfDocument, to: selectedRange.start),
self.offset(from: selectedRange.start, to: selectedRange.end))
}
else
{
return nil
}
}
}
person
Leslie Godwin
schedule
24.08.2020