0

我有一个具有以下基本布局的应用程序,请理解我已经做了很多编程,但我对 IOS 相对较新,还没有正确地围绕 Storyboards/segues 进行思考。

实际上,我的应用程序具有以下屏幕:

WelcomeViewConroller ---ModalSeque--> MenuViewController --modalSegue---> newProjectVC || loadprojectVC ---modalSegue-->ProjectScreenVC。

从项目画面,用户可以返回menuVC画面。

现在,我知道每个 segue 都会创建一个视图控制器的新实例,这很好,我希望这发生,但是,当我从我的 ProjectScreen 中转回来,然后再次重新进入它时,我得到了一个巨大的内存泄漏并且非常奇怪的行为。

我知道当我离开时我需要关闭我的 View 控制器,尤其是我的 ProjectScreen,但是,无论我尝试什么,我都无法做到这一点。

任何帮助将不胜感激。

4

1 回答 1

3

我应该如何在 xcode 故事板中链接视图控制器?我列举了一系列在故事板中返回多个场景的方法。但简而言之,两个最简单的选择是:

  1. Unwind segues:如果只支持 iOS 6 或更高版本,请使用 unwind segues。因此,例如,在你的主菜单的视图控制器中,实现一个 unwind segue:

    - (IBAction)gotoMainMenu:(UIStoryboardSegue *)segue
    {
        // if you need to do anything when you return to the main menu, do it here
    }
    

    还要确保在主菜单的 .h 中定义它。然后control从你想要segue的按钮+拖动到场景下方面板中的“退出”按钮,然后选择“ gotoMainMenu”选项:

    挂钩放松赛格

  2. 导航控制器:如果您需要 iOS 5 支持,那么只需使用导航控制器并将模态转场替换为推送转场。然后您可以使用popToViewControllerpopToRootViewControllerAnimated跳转回多个场景。如果您不想显示导航栏,请在情节提要中选择导航控制器,然后在属性检查器中,取消选中“显示导航栏”:

    取消选中显示导航栏

    在这种情况下,我实际上认为最简单的方法是确保您的菜单场景是根(并让它绕到欢迎屏幕,就像我在其他答案的第 4 点中讨论的那样),在这种情况下,您可以调用popToRootViewController每当您想返回主菜单时。但是,如果主菜单不是根视图控制器,并且您想弹回它,您可以在场景之间传递一个点菜单控制器,或者您可以随后呈现的视图控制器在它们执行以下操作时执行以下操作想要回到主菜单:

    for (UIViewController *controller in [self.navigationController viewControllers])
    {
        if ([controller isKindOfClass:[MenuViewController class]])
        {
            [self.navigationController popToViewController:controller animated:YES];
            break;
        }
    }
    

在 Stack Overflow 的其他地方,您会看到人们正在考虑嵌套调用的方法dismissViewControllerAnimated,或其他类似的变体。我个人认为导航控制器和展开转场要容易得多,也更优雅。

于 2013-02-01T19:57:28.200 回答