pushViewController不是root viewController

时间:2016-05-16 19:58:42

标签: ios objective-c pushviewcontroller

我有两个视图控制器:LevelSelectViewController和GameViewController。

我正在制作的应用程序的根视图控制器(根视图控制器称为MainViewController)。

如何使用导航方法pushViewController:animated:对于LevelSelectViewController到GameViewController的这种转换?

在我的LevelSelectViewController中,单击一个按钮,执行以下操作方法:

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

2 个答案:

答案 0 :(得分:0)

如果您正在使用故事板,只需创建一个segue。如果您没有传递任何信息,可以通过控制从一个视图控制器拖动到另一个视图控制器来推送它。它是否是根视图控制器并不重要。

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

答案 1 :(得分:0)

  

如何将LevelSelectViewController转换为GameViewController的导航方法pushViewController:animated:

术语“根视图控制器”可能有点混乱,因为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
}

现在更常见的做法是将所有视图控制器放在故事板中,只需将按钮连接到推送过渡。