重新加载时保留视图状态

时间:2011-12-07 01:27:55

标签: ios view uiviewcontroller

我正在开发一个iPad应用程序,它本质上是一系列模拟现实系统测试的用户指令,能够在组件失败时对每个视图进行修改(表明需要解决的问题)。

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

如何从视图更新模型在很大程度上取决于模型的设计。这是一个可能有用也可能没用的样机。名为xField的所有内容都是UITextField的出口。

// 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];
}