Добавить 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 - Как определить последнее сообщение webViewDidFinishLoad?
  • Apple Mach-O и множественные ошибки «неопределенных символов» с использованием OpenCV
  • @synthesize vs @dynamic, каковы различия?
  • API, чтобы определить, работает ли на iPhone или iPad
  • Ошибка: протокол недоступен, сброс backtrace
  • Как проверить программно, если приложение установлено?
  • Эквивалент карты NSArray
  • Почему вы используете символ подчеркивания для переменной экземпляра, но не соответствующее ему свойство?
  • Как вы можете читать файлы MIME-типа в объективе-c
  • Cocoa Touch: как изменить цвет и толщину границ UIView?
  • Когда происходит освобождение связанного объекта?
  • Давайте будем гением компьютера.