重新加载时保持视图状态

Posted

技术标签:

【中文标题】重新加载时保持视图状态【英文标题】:Retain view state upon reloading 【发布时间】:2011-12-07 01:27:54 【问题描述】:

我正在开发一个 iPad 应用程序,该应用程序本质上是一系列用户指令来模拟现实生活中的系统测试,如果组件出现故障(指示需要解决的问题),它能够对每个视图进行修改。

我遇到的问题是视图的默认行为似乎是当我在层次结构中前进时,它会保留每个视图的状态,但是如果我前进然后再次前进,它将重置屏幕。

我想做的是让每个视图保存其状态,无论用户如何离开该屏幕,这样他们就可以确信即使他们需要返回上一步,他们的工作也会得到保存。

有没有办法做到这一点?还是我需要从根本上重新考虑我的设计?

【问题讨论】:

【参考方案1】:

您的视图需要模型对象。这些可以像字典一样简单,也可以像每个视图的自定义类一样涉及。

每个视图的控制器必须在视图离开屏幕之前使用通过其界面所做的更改来更新其关联模型。当它再次出现时,VC 将使用模型中的信息更新显示。

这遵循 Model-View-Controller 的主导 Cocoa 范例(另请参见:Cocoa Design Patterns);您的视图显示信息,您的模型存储信息,控制器在两者之​​间进行调解和转换。

如何从视图更新模型在很大程度上取决于模型的设计。这是一个可能有用也可能没有帮助的模型。所有名为xField 的东西都是UITextFields 的出口。

// When the view is taken off screen
- (void) viewWillDisappear 

    // Assume that when created, view controller is given a pointer 
    // to the relevant model object (probably by the previous view
    // controller)
    [model setNameOfHorse:[[self horseNameField] text]];
    NSUInteger newBetValue;
    newBetValue = [[dollarValueFormatter 
                        numberFromString:[[self betField] text]] 
                    unsignedIntegerValue];
    [model setBet:newBetValue];
    [model setNote:[[self noteField] text];

【讨论】:

感谢您的起点。我一直在阅读您提供的文档,但我仍然难以掌握这个概念。我一直在翻阅我拥有的几本书,但我承认我对 MVC 没有太多经验。您是否有任何代码示例可以说明这一点,特别是从视图更新模型?我一直以为这就是我一直在做的事情。 我添加了一点sn-p。不确定这会有多大帮助。

以上是关于重新加载时保持视图状态的主要内容,如果未能解决你的问题,请参考以下文章

退出应用程序并重新加载时保存 UIButton 的状态

选中模态视图行

Next.js 在下一页的 getInitialProps 完成加载时保持当前页面处于活动状态并重新渲染

如何在保持 UISearchBar 处于活动状态的同时强制 UITableView 重新加载数据?

添加新数据时如何在保持秩序的同时重新加载collectionview

重新加载页面后保持按钮处于活动状态(使用 PHP 和 HTML)