Я создал iOS 7 passcode replica, и у меня есть эта проблема, которую я не могу решить. Мне нужно, чтобы экран блокировки отображался поверх всего остального, поэтому приложение покрывается многозадачным представлением iOS, поэтому я добавляю его непосредственно в keyWindow
. Пока все хорошо.UIAlertViews, UIActionSheets и keyWindow проблемы
Проблема возникает, если есть alertView
или actionSheet
(упомяну лишь alertView
с в этом сообщении, чтобы сохранить его простым) открытым, когда я должен отобразить экран блокировки. Несколько раз ответили, что нет ссылок на alertView
s в iOS 7, что верно, и окно, в котором они отображаются, составляет _UIModalItemHostingWindow
, которое имеет 2 UIView
с, действительно без ссылки на alertView
.
Это _UIModalItemHostingWindow
также становится новым keyWindow
, так что на вершине всего остального, но это не может быть найден в [UIApplication sharedApplication].windows
смысле, если добавить блокировку экрана, чтобы мой бывший keyWindow
(по умолчанию keyWindow
, если вы будете) , он будет ниже alertView
и его затемненного фона, поэтому пользователь не может взаимодействовать с экраном блокировки, прежде чем отклонять alertView
. Другой вариант подробно описан ниже.
Экран блокировки работает следующим образом: по applicationDidEnterBackground
он проверяет, включен ли пароль; если он включен, а длительность пароля равна 0 (пользователь сразу же блокирует приложение), он теперь добавляет экран блокировки, поэтому он закрывает приложение в режиме многозадачности. Теперь опция, о которой я упоминал выше, заключается в том, чтобы добавить alertView
в это окно _UIModalItemHostingWindow
, но при возврате в приложение экран блокировки отображается с 1 + секундной задержкой (хотя я добавил его, прежде чем я пошел на задний план!) И приложение не покрывается чем-либо в многозадачном представлении. (В настоящее время он отображается и в неправильном положении, если вы переходите и загружаете его, это исправлено, но я еще не нажал фиксацию).
Я пробовал скрываться и removeFromSuperview
_UIModalItemHostingWindow
, но при возврате в приложение анимация alertView
по-прежнему работает так, как если бы она была просто запущена. Я подозреваю, что упомянутая выше задержка также происходит из-за того, как Apple обрабатывает alertViews
при возвращении на передний план.
Я также попытался создать новое окно и сделать это новым keyWindow
, но то же самое происходит.
Вот небольшая дискуссия об этом, охватывающая все, что я пробовал, может быть, я пропустил что-то в этом посте. https://github.com/rolandleth/LTHPasscodeViewController/issues/16
Любые идеи? Кроме создания справочных ссылок на все alertView
и actionSheet
внутри моего приложения, потому что я пытаюсь найти исправление для библиотеки паролей, а не для моих собственных приложений; Я могу найти грязные обходные пути для этого, нет проблем :)
Update: Окно _UIAlertOverlayWindow
если actionSheet
используется вместо alertView
, но он ведет себя так же, насколько я могу судить.
для случая UIActionSheet, его окно _UIAlertOverlayWindow доступно в [UIApplication sharedApplication] .windows, так что вы можете решить проблему с таблицей действий. Я тоже не получаю, как разрешить случай alertview –