web-dev-qa-db-fra.com

IOS: Comment mettre une vue sur le contrôleur de vue modal présenté?

J'ai une vue d'activité que j'ai ajoutée dans la classe AppDelegate pour appuyer sur la barre:

[self.mainTabBar.view addSubview: spinner];

Quand il y a des problèmes de connexion, il est visible dans chaque contrôleur de vue et tourne . Il y a un bouton sur certains contrôleur de vue, permet de présenter un contrôleur de vue modal . Ce contrôleur de vue modal chevauche le curseur. Comment faire en sorte que Spinner soit toujours au-dessus de toutes les vues ou au moins de ce contrôleur de vue modal? J'ai essayé de créer un tel contrôleur de vue qui présente le contrôleur de vue modale:

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

Fonctionne pas.

22
nik

Ajoutez la vue à la fenêtre principale.

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

Bien que la réponse de phix23 soit correcte, voici un exemple plus complet:

//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];

N'oubliez pas de nettoyer après vous-même lorsque vous n'en avez plus besoin.

Ce code peut être utilisé n'importe où dans votre application, même dans une bibliothèque :)

12
Maciej Swic

Une application affiche normalement son contenu dans une seule fenêtre tout au long de sa vie ..__ Mais il existe des situations dans lesquelles une fenêtre supplémentaire peut être utilisée pour ajouter du contenu au-dessus de tout le reste. Apple s'assure que UIAlertView reste toujours en haut en l'ajoutant dans une fenêtre séparée.

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];

Affichez et masquez votre fenêtre en définissant window.hidden = Yes or No selon vos besoins . Cela affichera toujours votre contentView au-dessus de tout le reste de l'application.

4
Jose Tomy Joseph

Le contrôleur modal se trouvant dans une couche complètement différente, vous ne pouvez créer aucune sous-vue du contrôleur de présentation pour le superposer.

Utilisez une UIAlertView avec une spinner à l'intérieur. Les alertes sont affichées dans une couche qui recouvre même les contrôleurs modaux.

0
Sulthan