Подтвердить что ты не робот

IOS: как поставить некоторый взгляд поверх представленного модального контроллера?

У меня есть представление активности, которое я добавил в класс AppDelegate, чтобы нажать панель:

[self.mainTabBar.view addSubview: spinner];

Когда возникают проблемы с подключением, он отображается в каждом контроллере представления и вращается. На определенном контроллере просмотра есть кнопка, которая позволяет представить некоторый контроллер модального представления. Этот контроллер модального просмотра перекрывает счетчик. Как заставить этот счетчик всегда быть на вершине всех представлений или, по крайней мере, поверх этого модального контроллера? Я попытался сделать такое, что видит контроллер, который представляет modal view controller:

[self presentModalViewController:selectionViewController animated:YES];
[self.view bringSubviewToFront:[self.tabBarController.view viewWithTag:15]];

Не работает.

4b9b3361

Ответ 1

Добавить представление в главное окно.

UIWindow* mainWindow = [[UIApplication sharedApplication] keyWindow];
[mainWindow addSubview: spinner];

Ответ 2

Хотя ответ phix23 верен, вот более полный пример:

//The view you want to present
UIViewController *viewControllerYouWantToPresentOnTop = [[UIViewController alloc] initWithNibName:nil bundle:nil];

//Create transparent host view for presenting the above view
UIWindow* mainWindow = [[UIApplication sharedApplication] keyWindow];
UIViewController *viewControllerForPresentation = [[UIViewController alloc] init];
[[viewControllerForPresentation view] setBackgroundColor:[UIColor clearColor]];
[[viewControllerForPresentation view] setOpaque:FALSE];
[mainWindow addSubview:[viewControllerForPresentation view]];

//Make your transparent view controller present your actual view controller
[viewControllerForPresentation presentViewController:viewControllerYouWantToPresentOnTop animated:TRUE];

Не забудьте очистить себя, когда вам это больше не нужно.

Этот код можно использовать в любом месте приложения, даже в библиотеке:)

Ответ 3

Приложение обычно отображает его содержимое в течение одного окна на протяжении всего жизненного цикла. Но есть ситуации, когда дополнительное окно может использоваться для добавления контента поверх всего остального. Apple гарантирует, что UIAlertView всегда остается сверху, добавляя его в отдельном окне.

UIView *contentView = [[UIView alloc] initWithFrame:contentFrame];
contentView.backgroundColor = [UIColor greenColor];
UIWindow *window = [[UIWindow alloc] initWithFrame:CGRectMake(x,y,contentFrame.size.width, contentFrame.size.height)];
window.windowLevel = UIWindowLevelAlert;
[window addSubview:contentView];
[window makeKeyAndVisible];

Показать и скрыть свое окно, установив window.hidden = Yes or No по мере необходимости. Это всегда будет показывать ваш contentView поверх всего остального в приложении.

Ответ 4

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

Используйте UIAlertView с внутренним элементом. Предупреждения отображаются в слое, который перекрывает даже модальные контроллеры.