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.
Ajoutez la vue à la fenêtre principale.
UIWindow* mainWindow = [[UIApplication sharedApplication] keyWindow];
[mainWindow addSubview: spinner];
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 :)
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.
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.