Swift iOS可以叠加5个或更多视图控制器

时间:2015-10-27 19:17:17

标签: ios xcode swift

我想知道在应用程序中堆叠5个以上的视图控制器是否可以?

我的问题是,我不知道如何重置/删除旧的VC并将新的VC作为根VC。

我的应用程序看起来像这样

  

导航控制器 - >表格视图 - > menu(modal segue) - >登录屏幕(模态segue) - >帐户页面(推送segue) - >表查看用户图像(push segue) - >用户图像详细信息页面(推送segue)

应用程序没有崩溃,但进入图像详细信息页面时有很多VC堆叠。

或者我可以在输入帐户VC时以某种方式从导航和内存堆栈中删除表格视图/菜单/登录屏幕?因此,帐户VC成为根VC。

2 个答案:

答案 0 :(得分:1)

这完全取决于控制器使用的应用程序流和内存的要求。如果你认为你要回到以前的页面并且在那些被归类的过程中没有堆积内存堆。那些可能会保持堆叠状态。否则,请确保继续从堆栈中删除viewControllers

在您的情况下,我相信您并不经常需要login / registration页面。因此,我建议您在登录后将应用rootViewController更改为homeView。如果logout再次更改rootView

修改:以下是更改rootViewController

的方法
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
UINavigationController *rootViewController = nil;
if (condition) {
    rootViewController = [storyboard instantiateViewControllerWithIdentifier:@"firstViewController"];
}else{
    rootViewController = [storyboard instantiateViewControllerWithIdentifier:@"secondViewController"];
}
_appDelegate.window.rootViewController = rootViewController;

答案 1 :(得分:0)

如果您在堆栈上有视图控制器,那么您再也不会使用它了,您可以这样做:

NSArray * old = self.navigationController.viewControllers;
NSArray * importantVCs = @[old[0], [old lastObject]]; //leave only root and top vc
[self.navigationController setViewControllers:importantVCs];

数组中的第一项将是新的根视图控制器。