У меня есть UITextView, который может иметь несколько строк. Все, что меня интересует, это позиция курсора на определенной строке (где неважно, первая, вторая, третья строка и т. Д.).Как получить смещение от начала строки UITextRange.start
Я входе UITextRange.start, который дает мне именно то, что мне нужно, а именно свойство смещения:
cp <UITextPositionImpl: 0x6e93260> <<WebVisiblePosition: 0x6e92d00>(offset=5, context=([d|], [u+0064|u+0000])>
Мой вопрос, как я получаю смещение = 5 в просто целое число?
Вот мой код:
UITextRange *caretPositionRange = textView.selectedTextRange;
NSLog(@"cp %@", caretPositionRange.start);
Все, что мне нужно будет что-то вроде Int ф = caretPositionRange.start.offset, который не работает.
редактировать:
уточнить, я особенно заинтересован в позиции курсора в каждой строке, а не весь TextView. Так что это не будет работать:
UITextRange *caretPositionRange = tv.selectedTextRange;
int caretPosition = [tv offsetFromPosition:tv.beginningOfDocument
toPosition:caretPositionRange.start];
как это могло бы дать мне другое положение для каждой линии.
редактировать 2:
ответ ниже дается Джесси работает очень хорошо. В первый раз, я получил EXC_BAD_EXCESS, поскольку я не проверял, является ли startOfLine = nil, поэтому имейте в виду, проверяет, не является ли оно нулевым.
Это не сработает, поскольку меня не интересует позиция с началаOfDocument, а скорее начало строки. Смещение всегда дает мне точное значение. Если я сделаю то, что вы предлагаете, я получу увеличивающиеся значения, например. Я не всегда получаю смещение = 5, если курсор находится на пятой позиции от начала строки. –
О, ничего себе. Извините, я совершенно неправильно прочитал ваш вопрос. Одну секунду. –
ОК, это должно сделать это сейчас. Возможно, вы захотите использовать UITextLayoutDirectionLeft, в зависимости от того, как он должен обрабатывать текст справа налево. –