2013-10-14 1 views
3

У меня есть UISearchBar, на котором я пытаюсь установить позицию курсора. Я использую делегаты UITectField, поскольку я не мог найти ничего прямого для UISearchBar. Ниже приведен код, я использую:UITextPosition to Int

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; так как я хочу, чтобы курсор находился на второй последней позиции.

Как установить курсор на вторую последнюю позицию?

ответ

6

подсказка, чтобы сделать положение, а затем диапазон без каких-либо длины, а затем выбрать его

например,

- (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; 
} 
14

Swift 3

Я наткнулся на этот вопрос изначально, потому что мне было интересно, как преобразовать UITextPosition к Int (на основе вашего заголовка). Вот что я отвечу здесь. Вы можете получить Int для текущей позиции текста, как это:

if let selectedRange = textField.selectedTextRange { 
    // cursorPosition is an Int 
    let cursorPosition = textField.offset(from: textField.beginningOfDocument, to: selectedRange.start) 
} 

Для установки положения курсора и другие задачи, см my fuller answer.

+6

Это, вероятно, самый плохой API, который я использовал до сих пор. Почему бы им просто не создать для него свойство, поскольку они буквально говорят в документах, единственная причина, по которой они это делают, потому что WebKit нуждается в объекте. Спасибо Apple. – Sirens

 Смежные вопросы

  • Нет связанных вопросов^_^