【发布时间】:2012-01-09 06:20:43
【问题描述】:
在为以下“问题”选择“正确”解决方案时,我需要一些帮助。
我使用新的故事板功能将我的应用程序的所有屏幕链接在一起。基本上结构可以深入到:
[导航控制器] => [视图控制器#1] => [标签栏控制器] => [视图控制器#2]*
**(以及其他一些暂时不重要的选项卡)*
我已将第一个视图控制器 (#1) 的 segue(推送)附加到选项卡栏控制器后面的视图控制器。当用户在第一个控制器上按下某些东西并且工作正常时,就会触发此推送。
// Execute preset segue
[self performSegueWithIdentifier:@"segueEventDetail" sender:self];
当用户(现在位于 View Controller #2 中)按下导航栏中的后退按钮时,用户会返回。假设他现在再次触发 segue,第二个视图控制器再次显示,但现在“重置”(空)。 (我相信在阅读了几篇论坛和文章后,这是使用 segue 时的标准行为,因为它们每次都会破坏并重新初始化视图控制器?)
这(被重置的视图控制器)造成了一个问题,因为第二个视图控制器的内容是动态的(取决于来自服务器的 JSON 响应),因此“需要”视图控制器保持完整(或恢复)当用户回来时。
我找到了几个描述同一问题的来源(见底部),但解决方案各不相同,我需要一些帮助来选择正确的。
总结:
- 如何在用户按下后“保留”/保存 View Controller 的状态,同时保留 Storyboard 的使用,最好还保留 Segue 的使用
自己的想法:
#1 我现在正在考虑将 JSON 响应缓存到我的单例类(并从那里到 PLIST),并在第二个视图控制器中检查此数据是否存在,然后重建查看之后我检查是否有任何新数据(恢复正常操作)。
#2 我正在考虑的另一个是“绕过”segue 并手动处理视图切换,部分解释在 (Storyboard - refer to ViewController in AppDelegate) - 这也可能吗?
但也许有更简单/更好的选择?
http://www.iphonedevsdk.com/forum/iphone-sdk-development/93913-retaining-data-when-using-storyboards.html Storyboard - refer to ViewController in AppDelegate How to serialize a UIView?
【问题讨论】:
-
来自UITabBarController Class Reference "部署标签栏界面时,您必须将此视图安装为窗口的根。与其他视图控制器不同,标签栏界面不应安装为另一个视图控制器。”无关,但很重要。
-
我不知道!这与我的问题有关,因为我在 tabcontroller 前面确实有另一个视图控制器。
标签: iphone objective-c uiviewcontroller storyboard segue