iosobjective-cuitextfieldintuitextposition

UITextPosition to Int


I have a UISearchBar on which I am trying to set a cursor position. I am using UITectField delegates as I couldn't find anything direct for UISearchBar. Below is the code I am using:

  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];

Question is in the 'newRange' object for 'toPosition' I want to have something like selectedRange.end-1; as I want the cursor to be on second last position.

How do I set the cursor to second last position?


Solution

  • the clue is to make a position and then a range with no length and then select it

    e.g.

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