сталFirstResponder Не уважает настройки клавиатуры - PullRequest
1 голос
/ 31 июля 2009

Я работаю над довольно простым приложением для iPhone, чтобы решить квадратное уравнение, главным образом потому, что это так просто - по крайней мере, концепции и математика!

Я создал интерфейс в Интерфейсном Разработчике, который имеет пару Меток, 3 текстовых поля (varAfield и т. Д.) И кнопку Решить. 3 текстовых поля, которые установлены как UITextFieldDelegate, были установлены так, чтобы они автоматически отображали клавиатуру «Цифры и пунктуация». Этот код используется, чтобы закрыть клавиатуру, а затем автоматически перейти к следующей переменной, когда пользователь нажимает клавишу возврата (которая говорит «Далее», за исключением переменной С, которая говорит «Готово»

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
if (theTextField == varAfield) {
    [varAfield resignFirstResponder];
    [varBfield becomeFirstResponder];
}
if (theTextField == varBfield) {
    [varBfield resignFirstResponder];
    [varCfield becomeFirstResponder];
}
if (theTextField == varCfield) {
    [varCfield  resignFirstResponder];
}
return YES;
}

Во всяком случае, проблема возникает с первым экземпляром становленияFirstResponder. Клавиатура появляется, как и должно быть, однако она использует ASCII-клавиатуру вместо «Цифры и Знаки пунктуации». Во второй раз, когда она вызывается, она работает как надо. Кроме того, если я снова начну с переменной A, она будет работать нормально. Независимо от того, куда я переместил первый экземпляр сталFirstResponder, первый (и только первый) раз, когда он вызывается в приложении, он не будет работать правильно.

Обновление: становится все равно (даже в первом случае), чтобы становиться верным, но не зависимо от того, какая клавиатура установлена, она все равно показывает «ASCII Capable». Так, что происходит? Я проверил все в IB, и, похоже, все в порядке ...

Ответы [ 2 ]

4 голосов
/ 06 октября 2009

Я могу подтвердить, что это происходит только на устройстве, а не в симуляторе. Я могу дублировать это поведение в v2.2.1, 3.0 и 3.1.

Если у вас есть целая куча текстовых полей, и объедините их в цепочку, вызвав становление beginFirstResponder в textFieldShouldReturn, как показано в примере выше, и все поля установлены на тип клавиатуры UIKeyboardTypeNumbersAndPunctuation, для каждого поля SECOND клавиатура изменится на UIKeyboardTypeASCIICapable .

Я пытался явно указать setKeyboardType: UIKeyboardTypeNumbersAndPunctuation, но это не имеет значения.

Интересно отметить, что это происходит только в том случае, если вы вызываете становление становления программным способом. Если пользователь щелкает текстовое поле напрямую, клавиатура отображается правильно.

Что еще интереснее, если вы посмотрите на свойство keyboardType в отладчике, оно по-прежнему будет иметь значение UIKeyboardTypeNumbersAndPunctuation, даже если на интерфейсе отображается клавиатура ASCII.

Причина, по которой это происходит, заключается в том, что ASCII и цифровые клавиатуры - это разные режимы одного и того же представления.

Действие по умолчанию клавиши «Далее» / «Возврат» на клавиатуре включает в себя переключение с числового представления на алфавитное, и это то, что происходит здесь.

Исправление: возвращение NO из textFieldShouldReturn для предотвращения возникновения поведения по умолчанию.

0 голосов
/ 31 июля 2009

Пробовали ли вы просто вызывать beginFirstResponder в каком-либо другом представлении, чтобы при вызове его в текстовом поле это происходило не впервые?

Кстати, первые два resignFirstResponder являются избыточными. Они могут даже быть причиной ошибки.

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