如何解除视图控制器的状态?

时间:2013-09-12 09:59:53

标签: ios xcode uiviewcontroller

Suppost我有两个viewcontroller,即vc1和vc2。每个vc都有一个按钮,按下时,背景将从默认的白色变为黑色,以及下一个按钮。

所以vc1的背景变黑了,我点击下一个按钮,它就毫无问题地推动了vc2。

- (IBAction)nextVC:(id)sender {

    UIViewController *otherView = [self.storyboard instantiateViewControllerWithIdentifier:@"vc2"] ;
    [self presentViewController:otherView animated:YES completion:NULL] ;
}

我在vc2上做同样的事情,因此vc2的背景变成了黑色。然后我解雇vc2,然后回到vc1,vc1的背景保持黑色。

[self dismissViewControllerAnimated:YES completion:nil] ;

问题是,当我按下vc1上的下一个按钮时,vc2的背景颜色不会保持黑色,它会变为默认的白色。有没有办法可以恢复我已经解雇的vc2的状态?不保存数据或在viewWillApper等上设置任何内容

简单地说,我问一个方法来恢复被解雇的视图,但不会推送新视图(vc2)。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

如果检查nextVC的代码,则表示您正在创建第二个视图控制器的新实例并将其推送。这就是为什么你总是得到刚刚初始化的白色背景VC。

所以,如果你想保持第二个VC的状态,你需要继续引用它。

UIViewController *otherView添加到视图控制器.h文件或.m作为本地属性。然后改变你的推送功能。

//Only initialise first time. Later don't need
if (otherView == nil){
    otherView = [self.storyboard instantiateViewControllerWithIdentifier:@"vc2"] ;
}
[self presentViewController:otherView animated:YES completion:NULL] ;

应该有效。

答案 1 :(得分:-1)

你不能只恢复“Dismissed”视图控制器,因为当一个viewController被解除时,它会被从内存中移除并且它的保留计数变为0.你的vc1保持其状态,因为它永远不会被解雇,你只是在另一个控制器上打开它。如果要保存vc2的状态,可以在SharedInstance或AppDelegate中设置一个标志,然后在出现vc2时检查它。