2011-10-14 11 views
9

nel mio viewcontroller, ho un tasto, quando si preme il pulsante, l'ingresso del navigationController, il mio codice come:self.navigationController è nullo

-(IBAction)ShangHaiButtonPressed:(id)sender{ 
    marketviewcontroller = [[MarketViewController alloc]initWithNibName:@"MarketViewController" bundle:nil]; 
    NSLog(@"%@",self.navigationController); 
    [self.navigationController pushViewController:marketviewcontroller animated:YES]; 
    [marketviewcontroller release]; 
} 

ma posso vedere il self.navigationController è nullo, come risolvere questo problema? grazie.

aggiornamento:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    _switchviewcontroller = [[SwitchViewController alloc]initWithNibName:@"SwitchViewController" bundle:nil]; 
    [self.window addSubview:_switchviewcontroller.view]; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 
+1

Credo che il tuo currentViewController in non in gerarchia pila controller di navigazione. aggiungi currentViewController a navigationcontroller dovrebbe risolvere il tuo problema – iOSPawan

+0

quindi cosa dovrei fare? – Gaojian922188

+1

In App delegato ha la finestra Object, In AppDidFinishLaunching method Prima crea oggetto per yr firstcontroller quindi crea NavigationControllerObject come - [[UINavigationController alloc] initWithRootViewController: yrcurrentcontroller]; [self.window addSubView: navigationController.view] – iOSPawan

risposta

19

Il navigationController proprietà di un controller di vista restituirà un oggetto controller di navigazione valida solo se il controller di vista è in stack di spostamento di un controller di navigazione. Un controller di visualizzazione può essere aggiunto a uno stack di navigazione nei seguenti modi.

  1. Facendo controllore vista RootViewController di un controller di navigazione utilizza initWithRootViewController: metodo UINavigationController

  2. Premendo il controllore vista utilizzando pushViewController: metodo UINavigationController.

Assicurati che il controller di visualizzazione sia aggiunto allo stack di navigazione in uno dei modi sopra descritti.


EDIT: (Dopo le didFinishLaunchingWithOptions: il codice aggiunto alla domanda):

Modificare le didFinishLaunchingWithOptions: metodo per questo,

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    _switchviewcontroller = [[SwitchViewController alloc]initWithNibName:@"SwitchViewController" bundle:nil]; 
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:_switchviewcontroller]; 
    [self.window addSubview:navController.view]; 
    [navController release]; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 
+0

Ho solo il codice precedente su come trattare con navigationController, quindi quale altro codice ho bisogno di scrivere, grazie. – Gaojian922188

+0

Hai * window -> currentViewController * e ora vuoi premere * marketviewcontroller *, (ie) * window -> currentViewController -> marketviewcontroller * giusto? – EmptyStack

+0

sì, hai ragione – Gaojian922188

0
In appdelegate.m file make your first view RootView for Navigation : 


-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{  

myView *Obj=[[myView alloc]initWithNibName:@"myView" bundle:nil]; 
UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:Obj]; 
nav.navigationBar.barStyle = UIBarStyleBlackOpaque; 
[window addSubview:nav.view]; 
[self.window makeKeyAndVisible]; 
return YES; 

}

In your myView.m file add below code to navigate to myNewView from myView : 

    -(void) registerMethod 
{ 
    myNewView *obj = [[myView alloc] initWithNibName:@"myNewView" bundle:nil]; 
    [self.navigationController pushViewController:obj animated:YES]; 

    [obj release]; 
} 
3

Questo codice produrrà la soluzione che state cercando:

-(IBAction)ShangHaiButtonPressed:(id)sender { 
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:self]; 
    [self.view removeFromSuperview]; 
    [appDelegate.window addSubview:nav.view]; // appDelegate is the delegate of your Application 
    marketViewController = [[MarketViewController alloc] initWithNibName:@"MarketViewController" bundle:nil]; 
    [nav pushViewController:marketViewController animated:YES]; 
    [marketViewController release];  
} 
+0

grazie mi ha aiutato in altre situazioni –