Как показать представление, подобное UIActionSheet, поверх всего, что на экране

У меня есть представление с UITextField, который является первым респондентом. Я пытаюсь добавить полупрозрачный вид с индикатором активности, который бы охватывал все.

Сейчас код выглядит примерно так:

CATransition *animation = [CATransition animation];
[animation setType:kCATransitionFade];
[self.window.layer addAnimation:animation forKey:@"fade in spinner"];
[self.window addSubview:spinnerView];

Это отлично работает, когда в представлении нет активного UITextField, но если он есть, виртуальной клавиатуре удается оставаться поверх моего spinnerView

Из того, что я читал, «модальные» подпредставления (такие как UIActionSheet и UIAlertView) используют отдельный UIWindow, чтобы быть действительно модальным, но в то же время Apple рекомендует не создавать более одного окна в вашем приложении.

Будем признательны за любые идеи


person Nick    schedule 29.09.2010    source источник
comment
Я забыл упомянуть, что приведенный выше код сейчас находится внутри AppDelegate, следовательно, self относится к экземпляру AppDelegate.   -  person Nick    schedule 29.09.2010


Ответы (1)


Проблема в том, что клавиатура появляется в собственном окне, которое находится в верхней части вашего окна. Итак, если вы хотите, чтобы ваше представление всегда было наверху, вы должны создать его в отдельном окне.

person eviltrue    schedule 29.09.2010
comment
Это то, что я упомянул в вопросе, однако, опять же, Apple говорит нам не создавать лишних окон, поэтому мне интересно, возможен ли какой-либо другой подход. Если нет, не могли бы вы привести пример правильного использования окон? Я пытался найти что-нибудь полезное или написать свой код, но окно так и не появилось :( - person Nick; 29.09.2010
comment
Если наличие клавиатуры в фоновом режиме не критично для вашего приложения, вы можете просто скрыть его перед отображением этого представления и показать его снова, когда представление скрыто. В любом случае попробую решить проблему с отображением окна и, если сработает, дам знать =) - person eviltrue; 29.09.2010
comment
Мне кажется невозможным ... помечу как решенное, так как ответ найден - person Nick; 14.10.2010