Примечание:
См. Принятый ответ (не с наибольшим количеством голосов) для решения от iOS 4.3.
Этот вопрос о поведении, обнаруженном на клавиатуре iPad, когда он отказывается отклоняться, если отображается в модальном диалоге с контроллером навигации.
В основном, если я представлю навигационный контроллер со следующей строкой, как показано ниже:
navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
Клавиатура отказывается отмахиваться. Если я закомментирую эту строку, клавиатура исчезнет нормально.
...
У меня есть два textFields, имя пользователя и пароль; имя пользователя имеет кнопку «Далее», а пароль - кнопку «Готово». Клавиатура не исчезнет, если я представлю это в модальном навигационном контроллере.
РАБОТАЕТ
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];
UINavigationController
класса. Приветствия.resignFirstResponder
выполнялся, но клавиатура все еще показывалась. Мой сценарий (presentationFormSheet с навигационным контролем) точно такой же, как ваш. Благодаря тонну!!Ответы:
В контроллере представления, который представлен модально, просто переопределите,
disablesAutomaticKeyboardDismissal
чтобы возвратитьNO
:источник
Это было классифицировано инженерами Apple как «работа по назначению». Я подал ошибку для этого некоторое время назад. Их аргументация заключается в том, что пользователь часто собирается вводить данные в модальной форме, поэтому они пытаются быть «полезными» и держать клавиатуру видимой, где обычно различные переходы в модальном представлении могут вызывать многократное отображение / скрытие клавиатуры.
редактировать: вот ответ инженера Apple на форумах разработчиков:
Это создает проблемы для многих людей (включая меня), но на данный момент, похоже, нет способа обойти это.
ОБНОВИТЬ:
В iOS 4.3 и более поздних версиях вы можете теперь реализовать `-disablesAutomaticKeyboardDismissal 'на вашем контроллере представления, чтобы вернуть NO:
Это решает проблему.
источник
UINavigationController
подкласс, который переопределяетdisablesAutomaticKeyboardDismissal
для возвратаNO
и использовать его в качестве контроллера навигации, когда вы представляете модальную форму листа. Смотрите ответ от @ miha-hribar ниже.Будьте осторожны, если вы отображаете модал с
UINavigationController
. Затем вы должны установитьdisablesAutomaticKeyboardDismissal
на контроллере навигации, а не на контроллере представления. Вы можете легко сделать это с категориями.Файл: UINavigationController + KeyboardDismiss.h
Файл: UINavigationController + KeyboardDismiss.m
Не забудьте импортировать категорию в файл, где вы используете UINavigationController.
источник
disablesAutomaticKeyboardDismissal
изUINavigationController
, а не собственного контроллера представления, чтобы устранить эту проблему.Я решил это, используя
UIModalPresentationPageSheet
стиль презентации и изменив его размер сразу же после его представления. Вот так:источник
Если вы переключаете другой модальный дисплей, вы можете заставить клавиатуру исчезнуть. Это не красиво и не оживляет, но вы можете заставить его уйти.
Было бы замечательно, если бы было исправление, но пока это работает. Вы можете включить его в категорию
UIViewController
и вызвать, когда вы хотите, чтобы клавиатура исчезла:Будьте осторожны с этим, хотя, когда вы просматриваетеDidAppear / viewDidDisappear и все эти методы вызываются. Как я уже сказал, это не красиво, но работает.
-Адам
источник
Вы также можете обойти это в универсальном приложении, просто проверив идиому и, если это iPad, вообще не поднимайте клавиатуру и позволяйте пользователю нажимать на то, что он хочет редактировать.
Возможно, это не самое удачное решение, но оно очень простое и не требует каких-либо хитроумных хаков, которые сломаются со следующим крупным выпуском iOS :)
источник
Поместите этот код в ваш viewWillDisappear: метод текущего контроллера - это еще один способ исправить это:
источник
Я обнаружил, что
disablesAutomaticKeyboardDismissal
добавлениеdisablesAutomaticKeyboardDismissal
функции не работает для моегоUITextField
в модальном диалоге.Экранная клавиатура просто не исчезнет.
Мое решение состояло в том, чтобы отключить все элементы управления вводом текста в моем диалоговом окне, а затем снова включить соответствующие элементы через доли секунды.
Кажется, что , когда IOS видит , что ни один из
UITextField
элементов управления не включен, то он действительно избавиться от клавиатуры.источник
Я уверен, что вы смотрели на это, но вы уверены, что ваш класс контроллера правильно подключен как делегат UITextField, верно?
источник
Может быть , не вернуть НЕТ, но ДА. Так что это может уйти.
И у вас есть
textFieldShouldEndEditing
возвращение да?И почему ты стреляешьизвини я вижу сейчас[nextResponder becomeFirstResponder]
?!Можем ли мы предположить, что ни один из них, случайно, не имеет
tag
значенияsecondField.tag+1
? Если это так, вы говорите им стать первым респондентом, а не уходить в отставку первым. Возможно, поместите NSLog () в структуру if.источник
NSLog("tf %x / method ...",textField);
во все функции делегата?Для тех, у кого проблемы с UINavigationController, смотрите мой ответ на похожий вопрос здесь: https://stackoverflow.com/a/10507689/321785
Редактировать: я считаю это улучшением решения Михаа Хрибара (поскольку решение принимается там, где оно должно быть), а не комментарием Паскаля относительно категории на UIViewController
источник
может быть не идеальным решением, но работает
[self.view endEditing: YES];
от того, где ваша кнопка или жест реализован, чтобы представить модальный
источник
источник