我有一个具有以下基本布局的应用程序,请理解我已经完成了很多编程,但我对IOS来说相对较新,而且尚未正确地理解Storyboards / segues。
实际上,我的应用程序有以下屏幕:
WelcomeViewConroller --- ModalSeque - > MenuViewController --modalSegue ---> newProjectVC || loadprojectVC --- modalSegue - > ProjectScreenVC。
从项目屏幕,用户可以返回menuVC屏幕。
现在,我明白每个segue都会创建一个视图控制器的新实例,这很棒,我希望这种情况发生,但是,当我从ProjectScreen中退出,然后再次重新输入时,我获得了巨大的记忆泄漏和非常奇怪的行为。
我知道我需要解雇我的View控制器,特别是当我离开它时我的ProjectScreen,但是,无论我尝试什么,我都无法实现这一点。
非常感谢任何帮助。
答案 0 :(得分:3)
在How should I chain viewcontrollers in xcode storyboard?中,我列举了一系列回归故事板中多个场景的方法。但简而言之,两个最简单的选择是:
展开segues:如果仅支持iOS 6或更高版本,请使用展开segues。因此,例如,在主菜单的视图控制器中,实现一个展开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
”选项:
导航控制器:如果您需要iOS 5支持,那么只需使用导航控制器并用push segues替换模态segue。然后,您可以使用popToViewController
或popToRootViewControllerAnimated
跳回多个场景。如果您不想显示导航栏,请在故事板中选择导航控制器,然后在属性检查器中取消选中“显示导航栏”:
在这种情况下,我实际上认为最简单的方法是确保您的菜单场景是根(并让它稍微绕过欢迎屏幕,就像我在其他答案的第4点讨论的那样),在这种情况下你只要您想返回主菜单,就可以致电popToRootViewController
。但是,如果主菜单不是根视图控制器,并且您想要弹回它,您可以将点菜单控制器从一个场景传递到另一个场景,或者您可以随后呈现视图控制器,当它们执行时,执行以下操作想回到主菜单:
for (UIViewController *controller in [self.navigationController viewControllers])
{
if ([controller isKindOfClass:[MenuViewController class]])
{
[self.navigationController popToViewController:controller animated:YES];
break;
}
}
在Stack Overflow的其他地方,你会看到人们正在考虑如何嵌入dismissViewControllerAnimated
或其他类似的变种。我个人认为导航控制器和放松细分更容易,更优雅。