2010-09-14 13 views
20

¿cómo puedo obtener la vista actualmente activa (la vista principal que está siendo vista actualmente por el usuario) del delegado de la aplicación para fines de referencia?¿Cómo obtener la vista activa en una aplicación iOS del delegado de la aplicación?

+0

definir la "vista principal". Podría haber varios objetos 'UIView' (y subclases) en pantalla a la vez. ¿Cuál esperarías obtener? –

+0

Digamos que el usuario se encuentra actualmente en una pantalla para realizar una acción específica, quiero obtener el control de vista para la vista de contenedor para esa pantalla – David

+0

. Deberá hacer un seguimiento de eso usted mismo. Al igual que las vistas, podría haber más de un controlador de vista activo en la pantalla. –

Respuesta

9

Depende de cómo esté configurada su aplicación.

Normalmente, el delegado de su aplicación tendrá una propiedad de controlador de vista principal que le permitirá acceder a ella.

Para obtener su aplicación delegado

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

UIView *topView = appDelegate.viewController.view; 

Si su aplicación tiene una propiedad de control de navegación en el delegado de la aplicación se puede hacer algo como esto.

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

La tercera línea me da un error: la propiedad 'navigationController' no se encuentra en el objeto de tipo 'kzAppDelegate' – zakdances

+0

, entonces probablemente no estés usando un controlador de navegación. Mira la segunda línea de código en mi respuesta. – Randall

+0

¡No funciona con vistas modales! – skywinder

0

puede utilizar [appDelegate.navigationController.topViewController class] para registrar la clase del controlador o conseguir la propiedad del título saber de cuál se trata.

0

la esperanza que esto le ayuda

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

¡No funciona con vistas modales! – skywinder

0

En cualquier parte de la aplicación que puede conseguir su RootViewController Ver también como la:

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

¡No funciona con vistas modales! – skywinder

14

Todas las respuestas más no funciona con modal presentó ¡puntos de vista! Utilice este código en su lugar:

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

+0

funciona para mí, gracias :) –

1

encontré este y funciona muy bien para mí para todo tipo de segues y controladores de vista.

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

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

return topViewController; 

}

0

Trate Eric's answer:

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

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

    return topController; 
} 
Cuestiones relacionadas