不是根的 pushViewController viewController

pushViewController that's not a root viewController

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

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

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

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

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

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

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

How can I use the navigation method pushViewController:animated: for this transition for LevelSelectViewController to GameViewController?

术语 "root view controller" 可能有点令人困惑,因为 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
}

不过,现在更典型的做法是将所有视图控制器放在故事板中,然后简单地将按钮连接到推送转换。