it-swarm.com.ru

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

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

[self.mainTabBar.view addSubview: spinner];

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

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

Не работает.

22
nik

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

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

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

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

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

12
Maciej Swic

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

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

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

0
Sulthan