0

我使用以下代码从主视图 ( ViewController.h) 切换到另一个视图 ( TouchViewController),然后类似地从该视图切换到下一个视图 ( QuestionsViewController)。
如何从这里返回主视图?即 for 的价值是initWithNibName什么MainStoryboard.storyboard

- (IBAction)startGame:(UIButton *)sender {

    TouchViewController *second = [[TouchViewController alloc] initWithNibName:@"TouchViewController" bundle:nil];

    [self presentViewController:second animated:YES completion:nil];
}

- (IBAction)selectTopic:(UIButton *)sender {
    NSString *category = [[sender titleLabel] text];
    [[NSUserDefaults standardUserDefaults] setObject:category forKey:@"MyKey"];
    QuestionsViewController *second = [[QuestionsViewController alloc] initWithNibName:@"QuestionsViewController" bundle:nil];
    [self presentViewController:second animated:YES completion:nil];
}

现在回到主视图我有一个问题,即

- (IBAction)backtoMainMenu:(id)sender {
    ViewController *second = [[ViewController alloc]initWithNibName:@"MainStoryboard.storyboard" bundle:nil];
    [self presentViewController:second animated:YES completion:nil];
}

此时应用程序崩溃了!我想这是因为initWithNibName:@"MainStoryboard.storyboard"无法使用但ViewController没有任何其他xib文件 - 那我该怎么办?

4

1 回答 1

1

首先storyboard不能用作xib文件它们不是一回事。其次,您有一个视图控制器,它呈现一个视图控制器,它也呈现一个视图控制器,因此您可以从第三个视图控制器中执行以下操作:

[self.presentingViewController.presentingViewController 
            void)dismissViewControllerAnimated:YES completion:nil];

这是您可以做到的最快方式,但它并不是真正可重用的,如果您有一个更复杂的视图控制器层次结构,那么这样做真的很难看,其他解决方案可以是委托或通知。

也只是一条建议,当您想返回上一个屏幕时,通常您不需要创建新的视图控制器(当您尝试backToMainMenu方法时,您只需删除所有视图控制器(屏幕),直到您到达所需的屏幕。

于 2013-06-15T22:06:56.177 回答