2011-11-02 63 views
0

可能重复:
Why can't I push a new view controller onto the current view?
Why is my new view controller not appearing?如果我的navigationController返回“(null)”,我该怎么办?

我需要从我的navigationController推我的视图控制器,但毕竟已经做了的NSLog语句来找出为什么什么也没有用出下面的代码,我意识到它返回null:

-(IBAction)doChangePasscode{ 

NSLog(@"Change Passcode Screen Loaded!"); 

ChangePasscode *cpscreen = [[ChangePasscode alloc] initWithNibName:@"ChangePasscode" bundle:[NSBundle mainBundle]]; 
[self.navigationController pushViewController:cpscreen animated:YES]; 

NSLog(@"%@",self.navigationController); 

} 

这是怎么发生的?我能做些什么来返回除(null)之外的适当值?

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:myRootViewController]; 

然后:

+0

什么是你有这样的原始控制器代码在?它实际上是一个NavigationController吗? – WrightsCS

+0

不知道,它只是叫做“ViewController.m”... – pixelbitlabs

+0

你可以在上面的代码中显示你正在初始化和显示'self' view controller的代码吗? – chown

回答

1

像大家已经解释过的和Why is my new view controller not appearing?,你需要先拥有一个导航控制器。使用该导航控制器推动您的视图控制器,然后您的视图控制器将不再为navigationController属性为null。

在这个例子中someSecondViewController将在上述代码中self

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    RootViewController *rootViewController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil]; 
    self.nav = [[[UINavigationController alloc] initWithRootViewController:rootViewController] autorelease]; 
    [rootViewController release]; 
    [self.window addSubview:nav.view]; 
    [self.window makeKeyAndVisible]; 
} 

- (void)someOtherMethod { 
    SecondViewController *someSecondViewController = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; 
    [self.nav pushViewController:someSecondViewController animated:YES]; 
    [someSecondViewController release]; 
} 

请仔细阅读这些:

View Controller Programming Guide for iOS
UINavigationController Docs
UIViewController Docs

0

我假设你要回到零,这意味着的viewController没有一个导航控制器,你可以有你的viewController是一个新创建的UINavigationController像这样从根本上解决这对于myRootViewController,self.navigationController将返回导航控制器。

我假设的viewController是在你的应用程序中的第一个,所以你想拥有这对你的appDelegate:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    MyViewController *viewController = [[[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil] autorelease]; 
    UINavigationController *myNavController = [[[UINavigationController alloc] initWithRootViewController:viewController] autorelease]; 

    self.window.rootViewController = myNavController; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 

然后若该IBAction为是MyViewController self.navigationController将返回导航控制器,而不是零。

希望有所帮助。

+0

我在什么地方说“myRootViewController”? – pixelbitlabs

+0

您想要成为导航控制器堆栈上的第一个viewController的viewController实例。 –

+0

我把“ViewController”,但它提出了一个错误,并说这是一个未声明的标识符:( – pixelbitlabs

相关问题