【问题标题】:How to recreate a UIViewController stack when the root view controller is a UITabBarController?当根视图控制器是 UITabBarController 时如何重新创建 UIViewController 堆栈?
【发布时间】:2010-08-08 16:22:47
【问题描述】:

我有一个应用程序,如果它在某个视图中退出,我想将该视图恢复到用户离开的确切位置。

我的 applicationDidFinishLaunching 目前非常简单:

- (void)applicationDidFinishLaunching:(UIApplication *)application {

    // Override point for customization after app launch    
    [window addSubview:tabBarController.view];
 [window makeKeyAndVisible];

}

如何恢复必须堆叠在标签栏控制器中的 3 个视图控制器序列?

通常,用户与应用进行这些交互以进入我想要恢复的视图:

  1. 应用弹出;
  2. 第一个选项卡是一个表格视图(因此它是我必须恢复的第一个视图控制器)并且用户选择一行;
  3. 出现的视图是另一个表视图(因此它是我必须恢复的第二个视图控制器)并且用户点击该视图顶部栏中的 +;
  4. 最后一个视图控制器以模态方式显示(因此它是我必须恢复的第三个视图控制器)。

我尝试了post 的答案建议,但我的标签栏控制器结果一团糟(帖子不使用标签栏控制器,我是 iPhone 开发的初学者,所以我的尝试是'不是很成功)。

提前致谢。

【问题讨论】:

    标签: iphone objective-c uiviewcontroller


    【解决方案1】:

    这听起来不像您在描述典型的 UITabBarController 使用模式,其中您有一系列始终可用并为应用程序提供不同使用模式的选项卡。通常重新创建标签栏控制器的状态只是像往常一样实例化标签并选择当前标签。

    提供不断增加的细节级别的屏幕序列是 UINavigationController 的正常使用模式。

    您可能需要先调查一下自己的设计是否合理,然后再考虑如何恢复它。

    也就是说,您可以在 applicationDidFinishLaunching 中重新创建整个结构,也可以为每个类指定逻辑来重新创建下游的视图控制器和视图。我会采取后一种方法。

    【讨论】:

    • 谢谢,西莫。您提到的最后一种方法确实更好,因为关注点分离。我会试试。在我的应用程序中,只有第一个标签栏有一个表格视图,当用户在第一个表格中选择一行(活动及其执行之间的关系)时,该表格视图会转到另一个表格视图。其他标签栏也有其他功能。非常感谢您的建议。
    • 是的!像魅力一样工作。在每个类的 viewDidLoad 中,我在 plist 文件中搜索数据并使用 [controller1 presentModalViewController:controler2 animated:NO] 重新创建堆栈。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    相关资源
    最近更新 更多