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)
}

Для установки позиции курсора и других связанных задач, см. Мой полный ответ.

Другие вопросы по тегам