【问题标题】:Lost In Views - Best Way to Transition Between UIViewControllers迷失在视图中 - 在 UIViewControllers 之间转换的最佳方式
【发布时间】:2011-02-22 22:54:50
【问题描述】:

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

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

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

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

谢谢。

【问题讨论】:

    标签: iphone cocoa-touch ipad


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      我假设你的意思是 UITabBarController。

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

      如果您的导航视图是主视图,并且用户只是打开标签栏视图进行设置等,然后返回导航视图,那么模态显示标签栏控制器是正确的方式。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-09
        • 2011-07-07
        • 1970-01-01
        • 1970-01-01
        • 2010-09-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多