6

Me pregunto, cómo obtener navController desde AppDelegate = [[UIApplication sharedApplication] delegate] en la programación de iPhone. por ejemplo, en otro viewController donde hacemos referencia a AppDelegate.Cómo obtener navController desde AppDelegate.

En el applicationDelegate.h tenemos:

UINavigationController *navController; 

Y el siguiente en applicationDelegate.m no

- (void)applicationDidFinishLaunching:(UIApplication *)application {  

    [window addSubview: navController.view]; 
    [window makeKeyAndVisible]; 
} 

es de todos modos para conseguir la NavController del mainWindow:

UIWindow *mainWindow = [appDelegate window]; 
+1

¿Por qué no hace que el controlador de navegación sea propiedad del delegado de su aplicación? –

+0

Necesito obtener la información acerca de navController solo por mainWindow (UIWindow * mainWindow = [ventana de aplicaciónDelegate]), es posible. – ramo

+0

Supongo que no. Pero, ¿por qué no puedes usar el delegado de la aplicación realmente? –

Respuesta

17

Si este otro UIViewController está contenida en el UINavigationController, sólo tiene que llamar:

UINavigationController *navController = self.navigationController; 

del UIViewController.

De lo contrario, puede configurar UINavigationController como una propiedad en AppDelegate.

// AppDelegate.h 
@property (nonatomic, strong) UINavigationController *navController; 

A continuación, ingrese appDelegate.navController.

O bien, se puede establecer el UINavigationController como RootViewController de ventana:

[window setRootViewController:navController]; 

y llamar desde cualquier lugar:

UINavigationController *navController = window.rootViewController; 
+0

¡Muy instructivo! ¡Gracias! Una pregunta, sin embargo: si vas a acceder a navController a través de 'ventana', ¿no tienes que acceder a través de la aplicación UIA? ¿Hay quizás una forma más corta? – JohnK

+0

Puede acceder a la ventana desde cualquier UIView con la propiedad 'window'. – Lucien

1

Puede hacer que navController sea propiedad de su clase de delegado. la muestra abajo:

En applicationDelegate.h

@property (retain, nonatomic) UINavigationController *navController; 

En applicationDelegate.m

@synthesize navController; 

continuación, puede utilizar el siguiente código para obtener el NavController en otras clases (Suponga que su clase es delegado MyApplicationDelegate):

appDelegate = (MyApplicationDelegate*)[[UIApplication sharedApplication] delegate]; 
UINavigationController *navController = appDeleagte.navController 
2

Puede hacer el navCo ntroller una propiedad

@property (nonatomic,strong) UINavigationController *navController; 

A continuación, sólo acceder a él desde su AppDelegate

appDelegate.Controller 
-1

Si está beginer y el alumno, el controlador de navegación es compartida en toda la aplicación que acaba de preparar la "pila" de sus de aplicaciones viewcontrollers, para que pueda acceder al control de navegación en cualquier controlador de visualización (solo si ese controlador se ha insertado) a través de la aplicación. Cuando presione cualquier controlador, se agregará a la "pila" de controlador de navegación.

Puede acceder al controlador de navegación con el objeto propio de ese viewcontroller.

[self.navigationController pushViewController:detail animated:YES]; 

Ir a través del enlace dará un conocimiento completo de la anatomía de la navegación.

http://developer.apple.com/library/ios/#documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/NavigationControllers.html

1

propiedades adicionales necesarias, disponible en casi cualquier lugar de su aplicación utilizando esta definición de la macro:

#define mainNavController (((AppDelegate*)[[UIApplication sharedApplication] delegate]).navController) 

Cuando coloca la macro en la parte superior de usted r fuente o en un archivo de encabezado .h que importas a tu fuente, entonces puedes comenzar a utilizar mainNavController como si fuera una variable local.

Por ejemplo:

[mainNavController pushViewController:myViewController animated:YES]; 

o sin la macro, situado en el código:

AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; 
appDelegate.navController; // do something with the navController 

Usted puede utilizar este código en casi cualquier lugar, lo cual es útil si está trabajando dentro de una clase y no puede acceder a ViewController directamente.

Cuestiones relacionadas