Изменить курсор в UITextField при установке нового текста - PullRequest
5 голосов
/ 25 августа 2011

Я обнаружил одну вещь.Если я установил да на функцию

- textField:shouldChangeCharactersInRange:replacementString:

Курсор останется на том же месте, которое я печатаю, например ("|" = курсор)

"|"     => Empty , type a
"a|"    => type b
"ab|"   => change cursor
"a|b"   => type c
"ac|b"  => type d
"acd|b" => change cursor
"ac|db" => type backspace
"a|db"  => type backspace again
"|db"   => *result*

Но, если мне нужно изменитьтекст, как положить "-" в предпоследнем символе, я делаю логику и устанавливаю текст с помощью:

  [textField setText:newText];

Но пример выше будет таким образом:

"|"      => Empty , type a
"a|"     => type b               (put character "-" automatic)
"a-b|"   => user change cursor
"a|-b"   => type c    
"ac-b|"  => type d               ## the cursor is in end ##
"acb-d|" => change cursor        ## "d" is in wrong place, the user have to  
                                 ## change cursor to reproduce the result above
"ac|b-d" => type backspace
"ab-d|"  => type backspace again   ## the cursor is in end again ##
"a-b|"   => *result*               ## I want delete "a" but it delete "d"

Как мне установить курсор на результат такой же "|d-b" как в первом примере?Или лучше вопрос: Как изменить текст и курсор в UITextField?

Ответы [ 2 ]

2 голосов
/ 29 марта 2012

Я нашел решение. Я не могу выбрать место курсора, но он делает то, что я хочу. Вы должны использовать функцию протокола UIKeyInput Есть 2 хорошие функции:

- (void)insertText:(NSString *)text;
- (void)deleteBackward;

Чем, переделав мой тестовый пример, я имею:

"|"      => Empty , type a
"a|"     => type b               (put character "-" automatic)
"a-b|"   => user change cursor
"a|-b"   => type c               (enter the character with a [textField insertText:@"c"]
"ac|-b"  => type d               (the same thing: [textField insertText:@"d"])
"acd|-b" => change cursor
"ac|d-b" => type backspace       (use a [textField deleteBackward])
"a|d-b"  => type backspace
"|d-b"   => *result*             (Work!!!)

Вы не можете изменить курсор, но для обычного набора текста это решит проблемы !.

0 голосов
/ 25 августа 2011

Вы пытались использовать протокол UITextInput для сбора информации о положении курсора?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...