0

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

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

一切正常。

但是,在 2 个模态视图之一中,我有一堆 UISlider 和 UISwitch。我希望它们保留它们的值,但解雇会丢失它们:一旦我触发按钮以显示包含 UI 元素的视图,该视图就会显示所有元素的所有值,就像我最初放在 xib 中一样。

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

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

4

2 回答 2

2

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

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

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

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

在您的模态视图控制器中创建一个协议,其方法类似于

- (void) doneEditing:(NSDictionary *)values

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

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

我希望这能让你朝着正确的方向前进。重要的是要记住,每次你 segue 或创建并呈现一个模态视图时,你正在创建该视图的全新实例,除非你告诉它一些关于它的信息,否则它对前一个实例一无所知。

于 2012-04-13T21:26:59.487 回答
2

是的,您提出的方法是完全正确的。不过要小心; 可以调用 viewWillAppear 的原因有很多;确保仅在视图控制器出现并首次显示视图时才执行此操作。

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

于 2012-04-13T21:37:00.997 回答