解雇一个观点会让它失去所有的价值...... viewWillAppear作为一种治疗方法?

时间:2012-04-13 20:48:46

标签: ios variables modalviewcontroller dismiss

我有一个基本的模态视图系统。

我的应用加载了UI基础,其中有2个按钮呈现2个其他视图。 在这些视图中,有一个关闭按钮。

一切正常。

但是,在2个模态视图中的一个中,我有一堆UISlider& UISwitch。 我希望它们保留它们的值,但是忽略了它们:只要我触发按钮以显示包含UI元素的视图,就会显示该视图,其中包含我最初放在xib中的所有元素的所有值。

我应该将所有值存储在变量中,然后在viewWillAppear中我可以“回忆”它们吗?

你会建议我另一种策略吗?

2 个答案:

答案 0 :(得分:2)

创建模态视图时,您正在创建modalViewController的新实例和modalView。这个新实例对任何其他实例一无所知。有几种方法可以保留这些模态视图控制器的先前迭代中的信息。

我该怎么做: 在主视图中设置占位符,并通过协议和委托设置将用户选择的值传递回主视图。然后,当您转到模态视图时,可以在显示模态视图之前加载这些变量。

所以假设你有一个包含所有值的字典:{slider = YES,someValue = 10,...}在主视图控制器中创建该字典,打开第一个字典,并在其中放置一些默认值它

在模态视图中,控制器会创建与属性相同的字典。

使用类似

的方法在模态视图控制器中创建协议

- (void) doneEditing:(NSDictionary *)values

将第一个视图设置为模态视图控制器的委托,并在doneEditing的实现中将值复制到弹出模态视图之前第一个视图中的字典。

当第一个视图准备好再次显示模态视图时,请在显示之前将值复制到模态视图的字典属性中。

我希望这会让你朝着正确的方向前进。重要的是要记住,每次你设置或创建和呈现模态视图时,你正在创建一个全新的视图实例,它根本不知道前一个实例,除非你告诉它一些事情。

答案 1 :(得分:2)

是的,你提议的方法是正确的。不过要小心;可以调用viewWillAppear有很多原因;确保你只在视图控制器出现并且第一次显示视图时才这样做。

NSUserDefaults可以是存储全球所需信息的绝佳场所。在viewWillDisappear中,以默认值存储所需的状态信息(滑块和开关的值)。然后在下次出现视图时检索它们。