【问题标题】:Keeping a ViewController in same state/ keeping it loaded in background?保持 ViewController 处于相同状态/保持在后台加载?
【发布时间】:2012-03-13 02:50:09
【问题描述】:

我目前正在开发一个具有多个视图、30 多个视图控制器的应用程序。我正在使用故事板将视图流连接在一起。

我希望这样当用户离开一个 ViewController 时,当他们返回到该视图时,它会保持与用户输入的相同更改的相同状态。 (进入 UITextFeild、UILabel、UITextView 等)

我有这么多视图,最好不必将信息存储在全局变量中或使用:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

提前致谢, 问候

【问题讨论】:

    标签: iphone ios xcode views


    【解决方案1】:

    有很多方法可以存储数据;全局变量和默认系统通常不是最佳选择。听起来您应该考虑为您的应用程序开发一个真实的数据模型。模型是 MVC 中的 M,它本质上是一个或多个对象,用于存储数据并管理应用程序的“业务逻辑”。

    您的模型可能像单个可变字典一样简单,也可能是相互关联的对象的复杂图。我不会在这里解释所有的 MVC —— 如果你不熟悉这个想法,你可以(应该)阅读它。但是当然可以创建一个模型来保存每个视图控制器的状态,并且当给定的控制器变为活动状态时,它可以设置其视图层次结构以匹配保存的状态。

    【讨论】:

    【解决方案2】:

    基本上,您需要实现类似堆栈的东西,在调用另一个 viewController 时,您将其推送到堆栈中,保留 viewController 所处的任何状态并从堆栈中弹出将把最后推送的 viewController(及其状态)带到查看。

    幸运的是,iOS 中已经有类似的东西 - UINavigationViewController。它提供了这样的方法 -

    – pushViewController:animated:
    – popViewControllerAnimated:
    – popToRootViewControllerAnimated:
    – popToViewController:animated:
    

    This tutorial 会告诉你如何在你的项目中实现它。因此,我建议您卷起袖子并在代码中实现所有这些,而不是通过 storyBoard 链接 viewController。希望这可以帮助。

    【讨论】:

    • 不要混淆管理视图控制器和管理数据。一个拥有 30 个视图控制器的应用程序应该有一个超越导航堆栈的可靠数据管理系统。
    • [quote] 他们回到那个视图,它处于与用户输入的相同更改的相同状态(UITextFeild、UILabel、UITextView)。[/quote]
    • 也许,但问题是关于视图及其状态。关于 MVC 等,您的回答通常是正确的。iOS 应用程序开发人员主要基于 MVC。
    • 链接失效。谢谢您的解决方案有效。 :)
    猜你喜欢
    • 1970-01-01
    • 2012-03-29
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 2014-08-19
    • 2011-09-07
    相关资源
    最近更新 更多