iOS - 在其顶部呈现模式后保留视图控制器状态
Posted
技术标签:
【中文标题】iOS - 在其顶部呈现模式后保留视图控制器状态【英文标题】:iOS - retain View Controller state after presenting modal on top of it 【发布时间】:2015-06-02 18:45:25 【问题描述】:所以我有一个视图控制器 A,它以模态方式呈现视图控制器 B。当 B 出现时,A 被设置为 B 的代表。 B 顶部有两个按钮:完成和取消。两者都调用
dismissViewControllerAnimated(true, completion: nil)
但是 Done 还调用了一个委托方法,该方法将一些信息存储在 A 中的数组中。一切都很好,除了当我回到 B 时,一些东西已经从先前的 Done 单击存储到数组中,然后单击 Cancel这一次,数组被初始化为其默认的空状态。
如何在维持该数组的现有状态的同时解除 B?谢谢。
编辑
抱歉 - 意识到几乎不可能想象我所描述的内容,所以这里是代码的要点:
class A: UIViewController, BProtocol
var array: [User] = []
func viewDidLoad()
...
func BProtocolFunction(newArray)
array = newArray
func prepareForSegue()
...
B.delegate = self
class B: UIViewController
var delegate: BProtocol?
// Works great, copies this new array to the array in A. However,
// if you go BACK into this modal, and then click cancel, that
// array is reset
func doneButtonClicked()
delegate.BProtocolFunction(newArray)
dismissViewControllerAnimated(...)
// So if the user clicks cancel, the modal is dismissed
// but the array is reset to []
func cancelButtonClicked()
dismissViewControllerAnimated(...)
总结一下:用户从 A 转到 B。B 以模态方式呈现。在 B 中时,他们会做一些事情,然后单击 Done 并调用委托方法来更改 A 中的数组,并且模式被解除。之后,如果他们回到 B,然后单击取消 - 数组将重置为 []。我希望它保留第一次完成单击时的数组。
【问题讨论】:
请显示您在哪里初始化数组以及在哪里更新它的代码。 【参考方案1】:您的代码中一定有一些错误。
从您发布的代码来看,您的数组不可能重置为零,因为您的 cancelButtonClicked 不会触发任何委托
我的猜测是:
-
您将 cancelButton 的操作目标错误地放置到了 doneButtonClicked() 函数中。
在 A ViewController 中的某个位置,您重置了 BProtocolFunction 以外的数组
【讨论】:
以上是关于iOS - 在其顶部呈现模式后保留视图控制器状态的主要内容,如果未能解决你的问题,请参考以下文章
在 IOS 6.0 中:底部工具栏中的 UIBarButton 在呈现和关闭模式视图控制器后消失
呈现模态后 UINavigationController 布局损坏
iOS UIImagePickerController 和 UIWebView 导致内存问题;呈现这些视图时如何保留我的应用程序的状态?