如何跳转到故事板中的UIViewController并仍然保留导航层次结构?

时间:2012-02-21 14:59:36

标签: ios xcode ios5 storyboard xcode-storyboard

我正在为ios5开发基于故事板的项目,到目前为止它运行良好,但我想在用户退出时保存用户的状态,以便当他们返回应用程序时,我可以将其跳回故事板中他们离开时的位置。

我的理解是,当您浏览故事板时,它会创建一堆UIViewControllers,这样当您关闭当前控制器时,它会知道要显示哪一个。但是,如果我在应用程序启动时以编程方式跳转到故事板中的一个UIViewControllers,那么就不会有那个历史记录,那个堆栈的控制器,以便回溯。如果没有别的,如果两个控制器在故事板中的某个位置进入同一个控制器,它就不会知道要返回哪个控制器。

处理这个问题的正确方法是什么?我是否只是通过故事板到达用户离开的位置,将每个UIViewController的动画设置为NO,直到我到达用户所在的那个? (如果是这样,那么存储这些信息的最佳方式是什么?是否有任何方法/类可以帮助解决这个问题,或者我是否采用自己的方式通过故事板存储它们?)

1 个答案:

答案 0 :(得分:0)

一种选择是使用NSUserDefaults。您无法在磁盘上准确保存UIViewControllers的确切实例,并检索它们就像它们在内存中一样。会发生什么,你应该以某种方式,例如键/值,标识您感兴趣并希望保存其状态的每个viewController。您还需要键入要保存其状态的每个元素,然后使用NSUserDefaults保存。

例如,假设您有这样的层次结构:

HomeView> ListOfNotes> NoteAtIndexPath:x

并且用户正在查看NoteAtIndexPath:x,并且还假设字体大小是动态的,因此用户可以在查看时使其变大或变小。您可以定义两个键:IndexOfLastNoteViewedLasFontSizeViewed,然后保存它们:

 [[NSUserDefaults standardUser] setInteger:5 forKey:IndexOfLastNoteViewed];
 [[NSUserDefaults standardUser] setFloat:17.0 forKey:LasFontSizeViewed];

当应用程序再次启动时,您可以检查密钥,并以编程方式浏览到HomeView> ListOfNotes> NoteAtIndexPath:5

以下是一些可能对您有帮助的链接: