Comment get la vue active dans une application iOS à partir du délégué de l'application?

Comment puis-je get la vue actuellement active (la vue principale actuellement vue par l'user) à partir du délégué de l'application à des fins de reference?

 UIWindow *window = [[UIApplication sharedApplication] keyWindow]; UIView *topView = window.rootViewController.view; 

Toutes les meilleures réponses ne fonctionnent pas avec les vues modales présentées! Utilisez ce code à la place:

UIView * topView = [[[[UIApplication sharedApplication] keyWindow] subviews] lastObject];

Cela dépend de la configuration de votre application.

Généralement, le délégué de votre application disposera d'une propriété de controller de vue principale qui vous permettra d'y accéder.

Pour get votre délégué d'application

 MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; UIView *topView = appDelegate.viewController.view; 

Si votre application dispose d'une propriété de controller de navigation dans le délégué de l'application, vous pouvez faire quelque chose comme ça.

 UIView *topView = appDelegate.navigationController.topViewController.view; 

Je l'ai trouvé et cela fonctionne très bien pour tous les types de segues et de voir les controllers.

+ (UIViewController *) getTopController {UIViewController * topViewController = [UIApplication sharedApplication] .keyWindow.rootViewController;

 while (topViewController.presentedViewController) { topViewController = topViewController.presentedViewController; } return topViewController; 

}

vous pouvez utiliser la [appDelegate.navigationController.topViewController class] pour save la class du controller ou get la propriété title pour savoir laquelle elle est.

J'espère que cela vous aide

 UINavigationController *navCnt = (UINavigationController *)self.window.rootViewController; if([navCnt.topViewController isMemberOfClass:[WebViewController class]]) { return UIInterfaceOrientationMaskAll; } else return UIInterfaceOrientationMaskPortrait; 

Partout dans l'application, vous pouvez get votre rootViewController Voir aussi comme ça:

 id<UIApplicationDelegate> appDelegate = [[UIApplication sharedApplication] delegate]; UIView *rootView = appDelegate.window.rootViewController.view; 

Essayez la réponse d'Eric :

 + (UIViewController*) topMostController { UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController; while (topController.presentedViewController) { topController = topController.presentedViewController; } return topController; }