клавиатура iPad не отклонит, если модальным стилем презентации ViewController будет UIModalPresentationFormSheet

Примечание:

См. принятый ответ (не главный проголосовавший) для решения с 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];
214
задан Irfan 24 March 2014 в 08:43
поделиться

3 ответа

возможно, не возвращает NO, но YES. Так что это может уйти.

И у вас есть textFieldShouldEndEditing , который тоже возвращает ДА?

И почему вы увольняете [nextResponder сталаFirstResponder] ?! извините, теперь вижу

У меня также есть несколько UITextViews у всех есть свои "редактируемые" для свойства установлено значение FALSE.

Можно ли предположить, что ни у одного из них случайно нет тега значения secondField.tag + 1 ? Если это так, вы говорите им стать первым респондентом, вместо того, чтобы уволить его. Может быть, поместите какой-нибудь NSLog () в эту структуру if.

0
ответ дан 23 November 2019 в 04:23
поделиться

Я уверен, что вы это видели, но вы уверены, что ваш класс контроллера правильно подключен как делегат UITextField, верно?

0
ответ дан 23 November 2019 в 04:23
поделиться

Это было классифицировано инженерами Apple как "работает как задумано". Некоторое время назад я зафиксировал ошибку. Они объясняют это тем, что пользователь часто вводит данные в модальную форму, поэтому они пытаются быть "полезными" и сохранить клавиатуру видимой там, где обычно различные переходы внутри модального представления могут привести к тому, что клавиатура будет неоднократно отображаться/скрываться.

edit: вот ответ инженера Apple на форумах разработчиков:

Ваше представление случайно не было представлено со стилем UIModalPresentationFormSheet? Чтобы избежать частых анимаций входа и выхода, клавиатура иногда остается на экране, даже когда нет первого участника. Это не баг.

Это создает проблемы многим людям (в том числе и мне), но на данный момент, похоже, нет способа обойти это.

UPDATE:

В iOS 4.3 и более поздних версиях теперь можно реализовать `-disablesAutomaticKeyboardDismissal' в контроллере представления, чтобы вернуть NO:

- (BOOL)disablesAutomaticKeyboardDismissal {
    return NO;
}

Это исправляет проблему.

172
ответ дан 23 November 2019 в 04:23
поделиться