Я кодирую какое-то приложение для iPad, и странный эффект начал появляться.
Я использую панель навигации, чтобы свободно перемещаться по своим представлениям. Во всяком случае, в одном из этих внутренних представлений я предлагаю возможность проверить, действительно ли пользователь хочет вернуться к основному виду через представление предупреждений (просто пара кнопок «Да / нет»).
Как только пользователь подтверждает, что хочет вернуться назад, я «вручную» открываю представление и перехожу к основному виду, где прячется клавиатура.
НО, дело в том, что виртуальная клавиатура ведет себя странно. Внутри «внутреннего вида» клавиатура видна 90% времени (это нормально, вокруг много UITextFields). Что мне делать, чтобы скрыть это всякий раз, когда я хочу, чтобы оно стало скрытым? Я поместил что-то вроде этого в "main viewWillAppear":
[self.view endEditing:YES];
Видимо скрывает клавиатуру, а когда я делаю:
[[self navigationController] popToRootViewControllerAnimated:YES];
iPad перемещается назад, а затем клавиатура исчезает. Ничего страшного (в первый раз).
Но потом я решаю снова войти в тот же вид, поэтому появляется клавиатура, я делаю какие-то модные вещи. Затем я решаю прервать (с моей кнопкой), я снова показываю тот же самый вид предупреждения и подтверждаю, что хочу вернуться к основному виду (как и раньше). Код тот же, но на главном экране:
[self.view endEditing:YES];
строка, ничего не делает, и, что хуже всего, я потерял возможность закрывать клавиатуру в любом месте кода внутри приложения для всей сессии.
Почему я знаю, что в UIAlertView есть чем заняться? Потому что, если я изменю код внутри моей «кнопки отмены» из этого:
alertViewQuestionType=ALERT_ABANDON_TEST;
UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"" message:NSLocalizedStringFromTable (@"STR_ABANDON_TEST_WARNING", @"ui_strings", @"") delegate:self cancelButtonTitle:NSLocalizedStringFromTable (@"STR_CANCEL", @"ui_strings", @"") otherButtonTitles:nil] autorelease];
[alert addButtonWithTitle:NSLocalizedStringFromTable (@"STR_ABANDON", @"ui_strings", @"")];
[alert show];
на это:
[[self navigationController] popToRootViewControllerAnimated:YES];
(то есть, нет подтверждения для пользователя, пользователь просто переходит назад, когда нажимается кнопка отмены), затем, когда основной вид достигает функции «viewWillAppear», код скрытия клавиатуры работает. Не только ТО, но ВСЕ время до конца сеанса моего приложения.
Не знаю, понятен ли мой вопрос на 100%, но я буду более чем рад добавить сюда несколько дополнительных кусочков кода, если кто-то поверит, что он может пролить свет на эту тайну ...
Привет!