我看过很多主题,其中多个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];
}
感谢先进的帮助。 欢呼声。
答案 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本身,而不是其中一个视图:
然后单击segues选项卡(在最右侧)并从“Manual Segue”圈子拖动到想要从中删除的viewController。
然后点击segues并在标签中为它们指定不同的名称,如下所示:
然后,在您的代码中,您将拥有如下所示的行:
[self performSegueWithIdentifier:@"showAlternate" sender:nil];
您可以使用它来显示viewController的“showAlternate”标识符。您将拥有多个带有“Game1”和Game2“等标识符的segue。
答案 2 :(得分:0)
仔细检查getGame1
和getGame2
是否为BOOL
值,而不是某种对象,如果其为非零则将评估为YES。我多次犯过这个错误:
NSNumber* booleanValue = @NO;
if (booleanValue) {
// this code will run
}
if ([booleanValue boolValue]) {
// this code will not run - as expected
}
说真的,我犯了很多次这个错误。