6

Mi chiedo, come ottenere il navController da AppDelegate = [[UIApplication sharedApplication] delegate] nella programmazione dell'iPhone. ad esempio, in un altro viewController in cui facciamo riferimento a AppDelegate.Come ottenere navController da AppDelegate.

Nel applicationDelegate.h abbiamo:

UINavigationController *navController; 

E il là seguendo in applicationDelegate.m

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

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

è in ogni caso per ottenere il navController dal MainWindow:

UIWindow *mainWindow = [appDelegate window]; 
+1

Perché non si rende il controller di navigazione una proprietà del proprio utente delegato? –

+0

Ho bisogno di ottenere le informazioni su navController solo dalla finestra principale (UIWindow * mainWindow = [appDelegate window]), è possibile. – ramo

+0

Suppongo di no. Ma perché non puoi usare il delegato dell'app, davvero? –

risposta

17

Se questo altro UIViewController è contenuta nel UINavigationController, si può semplicemente chiamare:

UINavigationController *navController = self.navigationController; 

dal UIViewController.

Altrimenti, è possibile impostare UINavigationController come proprietà in AppDelegate.

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

quindi accedere appDelegate.navController.

In alternativa, è possibile impostare l'UINavigationController come RootViewController della finestra:

[window setRootViewController:navController]; 

E chiamare da qualsiasi luogo:

UINavigationController *navController = window.rootViewController; 
+0

Molto istruttivo! Grazie! Una domanda però: se si accederà al navController tramite 'window', non è necessario accedere attraverso l'applicazione UIA? C'è forse un modo più breve? – JohnK

+0

È possibile accedere alla finestra da qualsiasi UIView con la proprietà 'window'. – Lucien

1

È possibile impostare navController come proprietà della classe del delegato. esempio riportato di seguito:

In applicationDelegate.h

@property (retain, nonatomic) UINavigationController *navController; 

In applicationDelegate.m

@synthesize navController; 

quindi è possibile utilizzare il seguente codice per ottenere il navController in altre classi (dove l'classe delegato è MyApplicationDelegate):

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

È possibile effettuare il navCo ntroller una proprietà

@property (nonatomic,strong) UINavigationController *navController; 

Poi basta accedere dal tuo AppDelegate

appDelegate.Controller 
-1

Se siete beginer e discente, il controller di navigazione è condivisa in tutta l'applicazione che sarà solo preparare il "stack" della vostra applicazione di viewcontrollers, in modo da poter accedere al controller di navigazione in qualsiasi viewcontroller (solo se il controller è stato premuto) attraverso l'app. Quando si spinge qualsiasi controller, questo verrà aggiunto allo "stack" del controller di navigazione.

È possibile accedere al controller di navigazione con l'oggetto autonomo del viewcontroller stesso.

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

procedere con il collegamento darà conoscenza completa dell'anatomia navigazione.

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

1

Nessun immobile aggiuntivi necessari, disponibili quasi ovunque nella vostra applicazione usando questa definizione di macro:

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

Quando si posiziona la macro in cima a r sorgente o in un file di intestazione .h che si importa nella sorgente, quindi è possibile iniziare a utilizzare mainNavController come se fosse una variabile locale.

Ad esempio:

[mainNavController pushViewController:myViewController animated:YES]; 

O senza la macro, direttamente nel codice:

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

È possibile utilizzare questo codice praticamente ovunque, che è utile se si sta lavorando all'interno di una classe e non è possibile accedere direttamente a ViewController.

Problemi correlati