Как я могу определить местоположение удаления в UITextField - PullRequest
0 голосов
/ 02 февраля 2012

Я создаю текстовое поле, которое позволяет пользователю вводить дату, и я хочу показать необходимый формат: mm-dd-yyyy. По мере того, как они печатают, формат должен заменяться цифрами, которые они печатают. Например, если они введут 125, оно должно выглядеть следующим образом: 12-5d-yyyy.

Я смог заставить это работать (используя метод textField:shouldChangeCharactersInRange:replacementString:). Но есть 2 проблемы:

  1. Когда я обновляю текстовое поле, чтобы оно показывало формат и то, что они набрали (путем прямой установки textField.text), курсор перемещается в конец вставленного текста. Например, в настоящее время он выглядит следующим образом: 12-30-yyyy| (где | - курсор), но я хочу, чтобы он выглядел как 12-30-|yyyy. Так, как я могу поместить курсор туда, где они в последний раз печатались?

  2. Мне не удалось определить, где происходит удаление, если пользователь нажимает клавишу возврата или удаляет. Единственный известный мне способ определения, что они нажали клавишу Backspace или удаление, выглядит следующим образом: BOOL thisIsBackspace = ([string length] == 0) (где строка - это значение replacementString:. Но это не говорит мне, где это произошло. Так как я могу определить, где удаление происходит в UITextField?

Ответы [ 2 ]

1 голос
/ 02 февраля 2012

Использование UIDatePicker было бы хорошим способом. Помимо этого ...

В textField: shouldChangeCharactersInRange: параметр диапазона скажет вам, где, где в поле происходит фактическое изменение.

Вы также можете использовать stringByReplacingCharactersInRange, чтобы создать значение поля после редактирования. Затем вы можете использовать его, чтобы сравнить и найти, где они редактировали.

- (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSString *text = [textField.text stringByReplacingCharactersInRange:range withString:string];

    // Now you can compare text and textField.text and find where they are different.

    return YES;
}
0 голосов
/ 03 февраля 2012

Вы можете поместить курсор, используя:

[textField setSelectedRange:NSMakeRange(desiredPosition, 0)];

Вы можете определить, где было выполнено удаление, используя вход «range» для метода

textField:shouldChangeCharactersInRange:replacementString:
...