切换到视图控制器 B 后如何保持视图控制器 A 的状态?

Posted

技术标签:

【中文标题】切换到视图控制器 B 后如何保持视图控制器 A 的状态?【英文标题】:How to keep state of View Controller A after switching to View Controller B? 【发布时间】:2013-09-29 07:48:17 【问题描述】:

我正在制作一个应用程序,在切换到视图控制器 B 后,我需要视图控制器 A 的地图处于相同状态。但是,我不知道如何切换视图以查看相同状态?这意味着当我从视图控制器 B 切换回视图控制器 A 时,我的印象是我需要创建视图控制器 A 的新实例,然后推送该视图控制器。但是,这意味着我在第一次加载时丢失了所有实例数据。如何保存我第一次进入该视图时的数据?

【问题讨论】:

【参考方案1】:

您需要了解,当您从一个视图控制器移动到下一个视图时,新视图不会显示,直到您将控制权返回给 ios(或者您已退出该方法)。

例子

presentviewcontroller .....

做点什么

返回; -> 您的新视图控制器仅在此语句之后获得控制权

所以变量像 NSString *c = @"YES"; 会消失,但是

properties such as 

  @property (nonatomic,strong)   *c;

will retain whatever value you have placed in it.  

这是你的问题吗?

【讨论】:

如果您想知道在 dissmissviewcontroller 之后您在哪里,您将处于等待状态,等待来自最后一个控制器的最后一个视图的响应。 (等待按下按钮)。【参考方案2】:

我的印象是我需要创建视图控制器 A 的新实例,然后推送该视图控制器。

绝对不是。假设您使用的是导航控制器,并且您已推送控制器 B,只需将其弹出(导航控制器上的popViewController:)即可返回到 A 的原始实例。

创建 A 的新实例似乎是个坏主意,因为它会导致导航堆栈无限高。

如果你展示的是模态视图控制器,原理是一样的。 present... 将 B 放在 A 之上。dismiss... 将删除 B 并带您回到原来的 A。

【讨论】:

我要问的是如何“返回到 A 的原始实例”? 使用 popViewController。你在使用导航控制器吗?首先,您是如何从 A 移动到 B 的?您提到了推送,所以我假设您使用的是导航控制器。 我使用“presentViewController”来展示新的视图控制器,“dismissViewController”来关闭当前的。可以返回原始状态的某些代码的示例是什么? Dismiss 会将您返回到上一个视图控制器。我不明白你遇到的问题。请问您能否在问题中添加更多详细信息,包括您当前使用的代码? “但是,我不知道如何切换视图以查看相同的状态?” @Jake Byman 我想您应该在关闭视图之前使用委托从视图控制器 B 重置视图控制器 A 的状态控制器 B.

以上是关于切换到视图控制器 B 后如何保持视图控制器 A 的状态?的主要内容,如果未能解决你的问题,请参考以下文章

切换到另一个视图控制器时,如何保持标签栏可见? [关闭]

关闭后弹出视图控制器

在ios中保持视图控制器的第一个状态

从模态视图切换到标签栏视图控制器并且不会丢失标签栏

如何回到不同故事板的先前视图控制器?

如何从堆栈中弹出视图控制器而不导航到它们