目前,我在storyboard中放置了两个流程:入门/登录流程(当前设置为storyboard设置中的初始视图控制器)和主要应用流程(例如,登录后的核心应用体验)。
从入职到主要应用流程的过渡在UI中成功实现,但我认为我做的方式并不是很正确。我遇到的一个问题是无法将视图状态恢复到主应用程序流。
当从入门流转换到主应用流时,我使用presentViewController
转换到新的视图控制器,然后使用removeFromParentViewController
从视图层次结构中删除呈现视图控制器的父导航控制器。我在这里的想法是,主应用程序流应该真正拥有自己的视图层次结构,其根应该是新呈现的视图控制器中的第一个视图。
然而,以这种方式做事情会破坏视图恢复代码。我似乎不知何故没能正确地将视图层次结构“重置”为主导航控制器。以前,当我没有从视图层次结构中删除自注册导航控制器时,视图状态恢复是有效的(如下面的代码所示),但现在它不工作了--状态总是恢复到自注册流的开始,主应用程序流控制器永远不会调用- (void)decodeRestorableStateWithCoder:(NSCoder *)coder
方法。
下面是来自自注册流控制器的相关代码,它呈现了主应用程序流控制器。
// The presenting view controller from the onboarding flow
@implementation TLOnboardingStep2ViewController
-(void)presentMainViewController {
UIStoryboard *board = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
// The root view controller of the main app flow
ECSlidingViewController *slidingVC = [board instantiateViewControllerWithIdentifier:@"slidingViewController"];
[self presentViewController:slidingVC animated:YES completion:^{
[[UIApplication sharedApplication].delegate window].rootViewController = slidingVC;
[self.navigationController removeFromParentViewController];
}];
}
@end
我在这里做错了什么?谢谢。
发布于 2014-01-06 16:05:18
处理这个问题的更好方法似乎是使主应用程序流成为根视图控制器,并在需要时从主视图控制器弹出作为模式视图控制器的登录流。这就是我现在正在做的,它似乎工作得更好了,并且保持了层次结构的整洁。
https://stackoverflow.com/questions/20941139
复制相似问题