Примечание:
См. принятый ответ (не главный проголосовавший) для решения с iOS 4.3.
Этот вопрос о поведении, обнаруженном в клавиатуре iPad, где это отказывается быть отклоненным, если показано в модальном диалоговом окне с контроллером навигации.
В основном, если я дарю контроллеру навигации следующую строку как указано ниже:
navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
Клавиатура отказывается быть отклоненной. Если я комментирую эту строку, клавиатура уходит прекрасная.
...
У меня есть два текстовых поля, имя пользователя и пароль; имя пользователя имеет кнопку Next, и пароль имеет кнопку Done. Клавиатура не уйдет, если я представлю это в модальном контроллере навигации.
РАБОТЫ
broken *b = [[broken alloc] initWithNibName:@"broken" bundle:nil];
[self.view addSubview:b.view];
НЕ РАБОТАЕТ
broken *b = [[broken alloc] initWithNibName:@"broken" bundle:nil];
UINavigationController *navigationController =
[[UINavigationController alloc]
initWithRootViewController:b];
navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
navigationController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:navigationController animated:YES];
[navigationController release];
[b release];
Если я удаляю часть контроллера навигации и представляю 'b' как модальный контроллер представления отдельно, это работает. Действительно ли контроллер навигации является проблемой?
РАБОТЫ
broken *b = [[broken alloc] initWithNibName:@"broken" bundle:nil];
b.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:b animated:YES];
[b release];
РАБОТЫ
broken *b = [[broken alloc] initWithNibName:@"broken" bundle:nil];
UINavigationController *navigationController =
[[UINavigationController alloc]
initWithRootViewController:b];
[self presentModalViewController:navigationController animated:YES];
[navigationController release];
[b release];
возможно, не возвращает NO, но YES. Так что это может уйти.
И у вас есть textFieldShouldEndEditing
, который тоже возвращает ДА?
И почему вы увольняете извините, теперь вижу [nextResponder сталаFirstResponder]
?!
У меня также есть несколько UITextViews у всех есть свои "редактируемые" для свойства установлено значение FALSE.
Можно ли предположить, что ни у одного из них случайно нет тега
значения secondField.tag + 1
? Если это так, вы говорите им стать первым респондентом, вместо того, чтобы уволить его. Может быть, поместите какой-нибудь NSLog () в эту структуру if.
Я уверен, что вы это видели, но вы уверены, что ваш класс контроллера правильно подключен как делегат UITextField, верно?
Это было классифицировано инженерами Apple как "работает как задумано". Некоторое время назад я зафиксировал ошибку. Они объясняют это тем, что пользователь часто вводит данные в модальную форму, поэтому они пытаются быть "полезными" и сохранить клавиатуру видимой там, где обычно различные переходы внутри модального представления могут привести к тому, что клавиатура будет неоднократно отображаться/скрываться.
edit: вот ответ инженера Apple на форумах разработчиков:
Ваше представление случайно не было представлено со стилем UIModalPresentationFormSheet? Чтобы избежать частых анимаций входа и выхода, клавиатура иногда остается на экране, даже когда нет первого участника. Это не баг.
Это создает проблемы многим людям (в том числе и мне), но на данный момент, похоже, нет способа обойти это.
UPDATE:
В iOS 4.3 и более поздних версиях теперь можно реализовать `-disablesAutomaticKeyboardDismissal' в контроллере представления, чтобы вернуть NO:
- (BOOL)disablesAutomaticKeyboardDismissal {
return NO;
}
Это исправляет проблему.