XCode:单个ViewController转到多个ViewControllers

时间:2013-04-15 01:55:47

标签: iphone ios objective-c xcode viewcontroller

我看过很多主题,其中多个ViewControllers转到一个ViewController,但不是相反。

我正在制作一款游戏,您可以从Game_select.m中选择游戏,然后需要向6个视图控制器中的一个进行游戏。我尝试过使用故事板并对其进行硬编码,但两者都没有对我有用。

我已将Game1.h和Game2.h导入Game_select.m。 当我运行我的代码时,它总是转到Game1 ViewController。 这是我正在尝试的代码:

    if(getGame1) {
    //go to game1
    Game1 *game1 = [[Game1 alloc] init];
        [self.navigationController pushViewController:game1 animated:YES];
    }

    if(getGame2) {
    //go to game2
    Game2 *game2 = [[Game2 alloc] init];
        [self.navigationController pushViewController:game2 animated:YES];
    }

感谢先进的帮助。 欢呼声。

3 个答案:

答案 0 :(得分:2)

我个人不会在这种情况下使用导航控制器。创建(正常)UIViewController的所有viewControllers子类,然后使用此代码呈现一个viewControllers:

请注意,只有在以编程方式设置视图或使用xib(而非故事板)时,此代码才有效,如果您使用initWithNibName: bundle:而不是使用init

if(getGame1) {
    //go to game1
    Game1 *game1 = [[Game1 alloc] init];
    [self presentViewController:game1 animated:YES completion:nil];
}

if(getGame2) {
    //go to game2
    Game2 *game2 = [[Game2 alloc] init];
    [self presentViewController:game2 animated:YES completion:nil];
}

答案 1 :(得分:1)

从主viewController到其他viewControllers创建手动segue。首先,单击您想要显示的viewController 。确保选择了viewController本身,而不是其中一个视图:

enter image description here

然后单击segues选项卡(在最右侧)并从“Manual Segue”圈子拖动到想要从中删除的viewController。

enter image description here

然后点击segues并在标签中为它们指定不同的名称,如下所示:

enter image description here

然后,在您的代码中,您将拥有如下所示的行:

[self performSegueWithIdentifier:@"showAlternate" sender:nil];

您可以使用它来显示viewController的“showAlternate”标识符。您将拥有多个带有“Game1”和Game2“等标识符的segue。

答案 2 :(得分:0)

仔细检查getGame1getGame2是否为BOOL值,而不是某种对象,如果其为非零则将评估为YES。我多次犯过这个错误:

NSNumber* booleanValue = @NO;
if (booleanValue) {
    // this code will run
}

if ([booleanValue boolValue]) {
    // this code will not run - as expected
}

说真的,我犯了很多次这个错误。