迷失在视图中 - 在UIViewControllers之间转换的最佳方式

时间:2011-02-22 22:54:50

标签: iphone cocoa-touch ipad

我有一个iPhone / iPad应用程序,通过UINavigationController和UITabViewController管理其众多视图控制器。 UINavigationController处理大部分用户交互,UITabViewController处理用户设置/首选项。

我的app委托初始化UINavigationController并推送第一个视图控制器。可以通过导航控制器菜单栏上的按钮访问设置(UITabViewController);用户可以通过UITabViewController上的按钮返回主应用程序(UINavigationController)。

我的问题是:当我展示UITabViewController时,我应该怎么做UINavigationController(和它的视图控制器堆栈),反之亦然?当用户在两者之间切换时,是否有任何理由删除/释放/重新创建每个父控制器,或者我应该在应用程序的窗口中添加/删除每个父控制器的视图?

似乎第一个选项会更注意内存/资源,但是每次重新分配/初始化视图控制器的处理成本可能会使这些好处蒙上阴影。

感谢。

2 个答案:

答案 0 :(得分:0)

您不必手动管理导航控制器的堆栈。我要做的是将您的设置视图控制器显示为模态视图。您可以在导航控制器级别执行此操作。

假设settingsViewController是主视图控制器的属性。

self.settingsViewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal
[self.navigationController presentModalViewController:self.settingsViewController animated:YES];

答案 1 :(得分:0)

我认为你的意思是UITabBarController。

如果导航视图会显示在选项卡项的选项卡视图中,我建议让选项卡栏控制器成为应用程序的根视图控制器(因此始终可以在应用程序中看到)。

如果导航视图是主视图,并且用户只需打开设置等的标签栏视图并返回导航视图,则以正确的方式模式显示标签栏控制器。

在第一种情况下(标签栏控制器中的导航控制器),您无需添加/删除或分配/释放视图,因为UIKit将为您管理它。

在第二种情况下,您可以在想要显示时创建标签栏控制器。 presentModalViewController将保留视图控制器,以便您在发送消息后立即释放它。如果要保存视图控制器,则在加载应用程序时创建一个并将其保留在导航控制器中(并且导航控制器将始终保留在内存中)。

相关问题