web-dev-qa-db-fra.com

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

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?

24
David
UIWindow *window = [[UIApplication sharedApplication] keyWindow];
UIView *topView = window.rootViewController.view;
34
phatmann

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

16
skywinder

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;
9
Randall

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;
}
1
mdimarca

J'espère que cela vous aide

UINavigationController *navCnt = (UINavigationController *)self.window.rootViewController;

if([navCnt.topViewController isMemberOfClass:[WebViewController class]])
{
    return UIInterfaceOrientationMaskAll;
}
else
return UIInterfaceOrientationMaskPortrait;
0
Mehmood

Essayez réponse d'Eric :

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

    while (topController.presentedViewController) {
        topController = topController.presentedViewController;
    }

    return topController;
}
0
Hsm

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.

0
Farrukh Javeid

Partout dans l'application, vous pouvez également obtenir votre vue rootViewController:

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