IOS: Как поставить какой-либо вид поверх представленного модального контроллера вида? - PullRequest
22 голосов
/ 25 марта 2012

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

[self.mainTabBar.view addSubview: spinner];

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

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

Не работает.

Ответы [ 4 ]

61 голосов
/ 25 марта 2012

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

UIWindow* mainWindow = [[UIApplication sharedApplication] keyWindow];
[mainWindow addSubview: spinner];
12 голосов
/ 20 ноября 2012

Хотя ответ 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];

Не забудьте убирать за собой, когда они вам больше не нужны.

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

4 голосов
/ 23 июля 2015

Приложение обычно отображает свой контент в одном окне на протяжении всей своей жизни. Но есть ситуации, когда дополнительное окно может использоваться для добавления контента поверх всего остального. 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 поверх всего остального в приложении.

0 голосов
/ 25 марта 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...