comment puis-je obtenir la vue actuellement active (la vue principale actuellement consultée par l'utilisateur) du délégué de l'application pour des raisons de références?
UIWindow *window = [[UIApplication sharedApplication] keyWindow];
UIView *topView = window.rootViewController.view;
Toutes les meilleures réponses ne fonctionne pas avec les vues modales présentées! Utilisez plutôt ce code:
UIView * topView = [[[[UIApplication sharedApplication] keyWindow] subviews] lastObject];
Cela dépend de la configuration de votre application.
En règle générale, votre délégué d'application aura une propriété de contrôleur de vue principale qui vous permettra d'y accéder.
Pour obtenir votre délégué d'application
MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
UIView *topView = appDelegate.viewController.view;
Si votre application a une propriété de contrôleur de navigation dans le délégué d'application, vous pouvez faire quelque chose comme ça.
UIView *topView = appDelegate.navigationController.topViewController.view;
J'ai trouvé cela et cela fonctionne très bien pour moi pour tous les types de séquences et de contrôleurs de vue.
+(UIViewController*) getTopController{
UIViewController *topViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
while (topViewController.presentedViewController) {
topViewController = topViewController.presentedViewController;
}
return topViewController;
}
J'espère que cela vous aide
UINavigationController *navCnt = (UINavigationController *)self.window.rootViewController;
if([navCnt.topViewController isMemberOfClass:[WebViewController class]])
{
return UIInterfaceOrientationMaskAll;
}
else
return UIInterfaceOrientationMaskPortrait;
Essayez réponse d'Eric :
+ (UIViewController*) topMostController
{
UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController;
while (topController.presentedViewController) {
topController = topController.presentedViewController;
}
return topController;
}
vous pouvez utiliser [appDelegate.navigationController.topViewController class]
pour enregistrer la classe du contrôleur ou obtenir la propriété title pour savoir de laquelle il s'agit.
Partout dans l'application, vous pouvez également obtenir votre vue rootViewController:
id<UIApplicationDelegate> appDelegate = [[UIApplication sharedApplication] delegate];
UIView *rootView = appDelegate.window.rootViewController.view;