pushViewController不是根视图控制器

问题描述:

我有两个视图控制器:LevelSelectViewController和GameViewController。pushViewController不是根视图控制器

既不是我所做的应用程序的根视图控制器(根视图控制器被称为MainViewController)。

如何使用导航方法pushViewController:animated:将LevelSelectViewController转换为GameViewController?

在我LevelSelectViewController,你点击一个按钮,下面的操作方法进行:

- (IBAction)buttonPressed:(id)sender { 
     // the pushViewController:animated: method hopefully can be used 
     // other code 
    } 
+0

你是怎么显示'LevelSelectViewController'的? – rmaddy

+0

presentViewController ...这就是我一直在浏览我的应用程序中的所有按钮。如果我从AppDelegate建立根视图控制器作为导航控制器,我能否将其他子视图控制器用作导航控制器? – Frank

如何使用导航方法pushViewController:animated:将LevelSelectViewController转换为GameViewController?

术语“根视图控制器”可以是有点混乱,因为UIWindow具有rootViewController属性,UINavigationController具有initWithRootViewController参数。如果您致电-pushViewController:animated:,则必须在视图控制器图表中包含导航控制器,因为该方法属于UINavigationController。如果您LevelSelectViewController实例导航堆栈的一部分,你可以这样做:

- (IBAction)buttonPressed:(id)sender { 
    // create a game controller 
    GameViewController *gameController = [[GameViewController alloc] initWithNibName:nil bundle:nil]; 

    // push it 
    [self.navigationController pushViewController:gameController animated:YES]; 

    // other code 
} 

更典型的事,这些天,虽然是把所有的视图控制器在故事板和简单的按钮连接到推送过渡。

+0

我不知道如果你在App Delegate中将你的根视图控制器设置为一个导航控制器,该视图控制器的其他子项目也将能够享受相同的功能(无需重新定义其他导航控制器实例) .....谢谢! – Frank

如果你使用故事板刚刚创建SEGUE。如果你没有传递任何信息,你可以通过控制从一个视图控制器拖到另一个视图控制器来推送它。无论它是否是根视图控制器都没关系。

如果要传递数据,请在视图控制器上创建故事板上的segue,而不是索引路径或按钮等,并使用与故事板上的segue完全相同的标识符在视图控制器中调用prepareForSegueMethod。