我在我的 iPhone 项目故事板中定义了以下工作流程:
- 登录视图控制器在情节提要中设置为根视图控制器。
- 登录具有用于登录和设置帐户的单独工作流程。
- 两个工作流程最终都以模态方式显示带有主要应用内容的标签栏
- 对于后续的应用程序启动,我以编程方式确定要在其中实例化的正确控制器
appDidFinishLaunching:
- 对于后续应用程序,使用主要内容的选项卡栏是根视图控制器(以编程方式设置)
现在我想实现一个“注销”过程 - 一个按钮擦除所有用户数据并将用户带回原来的“登录/设置帐户”屏幕。
我遇到了一个问题,由于应用程序的多种状态,我需要有多个路径才能返回主屏幕。例如:
UIViewController* parent = self.presentingViewController;
UIViewController* grandparent = self.presentingViewController;
[self.presentingViewController dismissViewControllerAnimated:YES completion:^{
DLog(@"first dismiss");
DLog(@"%@",parent);
DLog(@"%@",grandparent);
[parent dismissViewControllerAnimated:YES completion:^{
DLog(@"second dismiss");
[grandparent.navigationController popToRootViewControllerAnimated:YES];
}];
}];
我将如何实现上面定义的登录/注销逻辑?
是否有正确的方法来完全折叠当前在屏幕上的视图层次结构并将其替换为另一个?
我在想这个:
[self.window setRootViewController:tabBarViewController];
但我不确定这是否会正确卸载我要分离的旧 rootViewController 堆栈使用的所有资源。