Предотвращение прямой печати в UITextField при использовании inputView для отображения UIPicker на iPhone - PullRequest
2 голосов
/ 15 ноября 2011

У меня очень хорошо работает код для отображения средства выбора на объекте UITextFieldUITableViewCell) с использованием inputView объекта UITextField.Это останавливает отображение клавиатуры, но не мешает кому-то непосредственно вводить данные в поле.

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

Есть ли способ выключить ввод текста?Я пробовал:

return NO;

в методе делегата textFieldShouldBeginEditing(), но это только предотвращает работу поля вообще - так что никакой сборщик не появляется.

Есть ли другие способыпредотвращения такого поведения?

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 15 ноября 2011

Вы можете использовать UITextFieldDelegate метод

-(BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)string

Это будет вызываться каждый раз, когда что-то пытается изменить текст в вашем текстовом поле. Вы можете просто проверить, что значение string - это то, чего вы ожидаете (что-то из вашего представления выбора), иначе отменить его. Если значение string соответствует желаемому, верните YES, в противном случае верните NO

1 голос
/ 21 ноября 2011

Как насчет использования другого UITextfield, которое находится за кадром?Затем uipicker является входным представлением для внеэкранного текстового поля.В обработчике, когда изменяется указатель даты, свойство текста исходного текстового поля указывается для обновления.Нажатие на исходное текстовое поле для вызова средства выбора обрабатывается одним из нескольких способов: 1. Для текстового поля всегда устанавливается значение userInteractionEnabled = NO, и над ним есть невидимая кнопка, которая обнаруживает касания.2. Текстовое поле в ячейке заменяется меткой, а касание вместо него определяется ячейкой с помощью didSelectRowAtIndexPath.
3. Текстовое поле в ячейке, после обнаружения касания делегат устанавливает текстовое поле в didBeginEditing дляuserInteractionEnabled = NO (не уверен, что это сработает).

Если подумать, можно даже попробовать №3, не создавая второе текстовое поле.

0 голосов
/ 05 февраля 2012

То, что вы просите сделать, это отключить подменю.

Чтобы сделать этот подкласс UITextField и реализовать следующий метод

(BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    return NO;
}

Это предотвратит отображение меню.

...