2010-09-14 7 views
20

Comment puis-je obtenir la vue actuellement active (la vue principale actuellement vue par l'utilisateur) du délégué de l'application pour des raisons de référence?Comment obtenir la vue active dans une application iOS à partir du délégué de l'application?

+0

Define "vue principale". Il pourrait y avoir plusieurs objets 'UIView' (et sous-classes) à l'écran à la fois. Lequel voulez-vous obtenir? –

+0

Dites que l'utilisateur est actuellement sur un écran pour effectuer une action spécifique, je veux obtenir le viewcontroller pour la vue du conteneur pour cet écran – David

+0

Vous devrez garder une trace de vous-même. À l'instar des vues, plusieurs contrôleurs de vue peuvent être actifs à l'écran. –

Répondre

9

Cela dépend de la configuration de votre application. En règle générale, votre délégué d'application disposera d'une propriété de contrôleur de vue principale qui vous permettra d'y accéder.

Pour obtenir votre délégué app

MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 

UIView *topView = appDelegate.viewController.view; 

Si votre application possède une propriété de contrôleur de navigation dans le délégué de l'application que vous pouvez faire quelque chose comme ça.

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

La troisième ligne me donne une erreur: Propriété 'navigationController' introuvable sur l'objet de type 'kzAppDelegate' – zakdances

+0

vous n'utilisez probablement pas un contrôleur de navigation alors. Regardez la deuxième ligne de code dans ma réponse. – Randall

+0

Ne fonctionne pas avec des vues modales! – skywinder

0

vous pouvez utiliser [appDelegate.navigationController.topViewController class] pour ouvrir une session la classe du contrôleur ou d'obtenir la propriété de titre pour savoir lequel il est.

0

Hope this vous aide

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

if([navCnt.topViewController isMemberOfClass:[WebViewController class]]) 
{ 
    return UIInterfaceOrientationMaskAll; 
} 
else 
return UIInterfaceOrientationMaskPortrait; 
32
UIWindow *window = [[UIApplication sharedApplication] keyWindow]; 
UIView *topView = window.rootViewController.view; 
+1

Ne fonctionne pas avec des vues modales! – skywinder

0

Partout dans l'application que vous pouvez obtenir votre RootViewController Voir aussi comme ça:

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

Ne fonctionne pas avec des vues modales! – skywinder

14

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

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

+0

fonctionne pour moi, merci :) –

1

J'ai trouvé et il fonctionne très bien pour moi pour tous les types de contrôleurs et de enchaînements vue. + (UIViewController *) getTopController { UIViewController * topViewController = [UIApplication sharedApplication] .keyWindow.rootViewController;

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

return topViewController; 

}

0

Essayez Eric's answer:

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

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

    return topController; 
} 
Questions connexes