UITextPosition для Int
У меня есть UISearchBar, на котором я пытаюсь установить позицию курсора. Я использую делегаты UITectField, так как я не смог найти ничего прямого для UISearchBar. Ниже приведен код, который я использую:
UITextField *textField = [searchBar valueForKey: @"_searchField"];
// Get current selected range , this example assumes is an insertion point or empty selection
UITextRange *selectedRange = [textField selectedTextRange];
// Construct a new range using the object that adopts the UITextInput, our textfield
UITextRange *newRange = [textField textRangeFromPosition:selectedRange.start toPosition:selectedRange.end];
Вопрос в объекте 'newRange' для 'toPosition', я хочу иметь что-то вроде selectedRange.end-1; так как я хочу, чтобы курсор был на второй последней позиции.
Как установить курсор на вторую последнюю позицию?
2 ответа
Подсказка состоит в том, чтобы создать позицию, а затем диапазон без длины, а затем выбрать его
например
- (IBAction)select:(id)sender {
//get position: go from end 1 to the left
UITextPosition *pos = [_textField positionFromPosition:_textField.endOfDocument
inDirection:UITextLayoutDirectionLeft
offset:1];
//make a 0 length range at position
UITextRange *newRange = [_textField textRangeFromPosition:pos
toPosition:pos];
//select it to move cursor
_textField.selectedTextRange = newRange;
}
Свифт 3
Я столкнулся с этим вопросом изначально, потому что мне было интересно, как конвертировать UITextPosition
для Int
(на основании вашего названия). Так вот что я отвечу здесь. Вы можете получить Int
для текущей позиции текста вот так:
if let selectedRange = textField.selectedTextRange {
// cursorPosition is an Int
let cursorPosition = textField.offset(from: textField.beginningOfDocument, to: selectedRange.start)
}
Для установки позиции курсора и других связанных задач, см. Мой полный ответ.