Добавить UIView над всеми другими видами, включая StatusBar

Я хочу создать представление (UIControl), которое блокирует все входные данные и показывает UIActivityIndicatorView при аутентификации пользователя.

UIActionSheet и UIAlertView оба позволяют добавить черный полупрозрачный вид поверх всех других видов для блокировки ввода, и я хотел бы сделать подобное.

Я попытался добавить свое представление к верхнему UIWindow в массиве [[UIApplication sharedApplication]], и, хотя это делает его выше UIKeyboard, если оно видно, оно не помещает его поверх StatusBar (что имеет смысл).

Моя следующая попытка состояла в том, чтобы расширить UIAlertView, удалить все его подзоны и установить его layer.contents = nil, а затем добавить ActivityIndicator в качестве подвью. Это хорошо работает, но я, похоже, не могу убить переходный пакет UIAlertView по умолчанию, когда вы вызываете его «показывать».

Есть ли у кого-нибудь какие-либо указатели на лучший способ решить эту проблему, которая дает мне полный контроль?

О, и я знаю, что блокирующий ввод невелик, но я уверен, что это на короткий промежуток времени, и он имеет преимущество, чтобы дать понять пользователю, что их действие, которое должно завершиться для них, – это обработка.

Я проделал еще несколько операций по API API и считаю, что я это разработал.

Чтобы отобразить представление по всему экрану, вам нужно создать свой собственный UIWindow и установить его свойство windowLevel как UIWindowLevelStatusBar. Затем вы можете добавить свои настраиваемые подпрограммы в это окно.

Обратите внимание, что Apple не поощряет, но они также не запрещают создание нескольких окон.

UIWindow *statusWindow = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; statusWindow.windowLevel = UIWindowLevelStatusBar; statusWindow.hidden = NO; statusWindow.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.7]; [statusWindow makeKeyAndVisible]; 

Когда вы хотите удалить окно с экрана, похоже, вы отпустите его из памяти.

 [statusWindow release]; 

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

Обновить:

Еще одна проблема, с которой я столкнулся, заключалась в том, что UIStatusBar не принимал события касания для прокрутки активного UIScrollView до вершины после того, как я отобразил и удалил это оверлейное окно. Решение заключалось в том, чтобы вернуть основное окно в ключевое окно после того, как оверлей был выпущен.

 [primaryWindow makeKeyWindow]; 

Мне нужно было представить представление поверх всех других видов в моем главном окне. Сначала я подумал о том, чтобы представить еще одно окно поверх моего windows. Так как яблоко не рекомендуется использовать несколько окон, я решил отказаться от него.

Следующий код сделал трюк для меня:

Я добавил свое представление в качестве подвидного windows в мое ключевое окно, которое автоматически отображает мое представление поверх всех других представлений. В моем случае этот код находится в делегате приложения

 [self.window addSubview:topViewController.view] 

И когда я закончил просмотр, следующий код удаляет его из windows.

 [topViewController.view removeFromSuperview]; 

Я собираюсь сделать то же самое в ближайшее время и нашел следующее

http://www.dejal.com/developer/dsactivityview

Похоже, у него есть все, что вы ищете

  • Возвратитесь к поведению приложения после разговора по телефону в собственном коде, чем UIWebView
  • Как сделать кнопку перехвата надписью для перехвата событий?
  • Сравнение двух NSDates и игнорирование временной составляющей
  • Как анализировать длительность ISO-8601 в Objective C?
  • Есть ли способ подавить предупреждения в Xcode?
  • Есть ли способ указать позицию / индекс аргумента в NSString stringWithFormat?
  • Преобразование NSArray в NSDictionary
  • Нажмите ViewController справа налево с помощью UINavigationController
  • Вам нужно создать NSAutoreleasePool в блоке в GCD?
  • Метод Swizzle на устройстве iPhone
  • Свойства IBOutlet не обновляются при использовании метода prepareForSegue
  • Давайте будем гением компьютера.