Я кодирую какое-то приложение для iPad, и начал проявляться странный эффект.
Я использую панель навигации, чтобы свободно перемещаться по своим представлениям. Во всяком случае, в одном из этих внутренних представлений я предлагаю возможность проверить, действительно ли пользователь хочет вернуться к основному представлению с помощью представления предупреждения (просто пара кнопок Да/Нет). Как только пользователь подтвердит, что хочет вернуться, я «вручную» открываю вид и перехожу к основному виду, где прячется клавиатура.
НО, дело в том, что виртуальная клавиатура ведет себя странно. Внутри «внутреннего вида» клавиатура видна 90% времени (это нормально, вокруг много UITextFields). Что мне делать, чтобы скрыть его всякий раз, когда я хочу, чтобы он стал скрытым? Я помещаю что-то вроде этого в «основной видWillAppear»:
[self.view endEditing:YES];
Очевидно, он скрывает клавиатуру, и когда я это делаю:
[[self navigationController] popToRootViewControllerAnimated:YES];
iPad возвращается назад, а затем клавиатура исчезает. Ничего страшного (в первый раз).
Но затем я решаю снова войти в тот же вид, поэтому появляется клавиатура, я делаю некоторые причудливые вещи. Затем я решаю прервать (своей кнопкой), снова показываю тот же вид предупреждений и подтверждаю, что хочу вернуться к основному виду (как и раньше). Код тот же, но в главном представлении:
[self.view endEditing:YES];
line, ничего не делает, и, что хуже всего, я потерял возможность закрывать клавиатуру по коду ВЕЗДЕ внутри моего приложения на весь сеанс.
Почему я знаю, что 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%, но я буду более чем рад добавить сюда несколько дополнительных фрагментов кода, если кто-то считает, что может пролить свет на эту тайну...
Привет!