我有一个具有登录视图的 iOS 应用程序(LognnViewController
),一旦用户成功通过身份验证,他们就会被带到另一个视图(DetailEntryViewController
)输入一些简单的详细信息。
输入详细信息后,用户将进入应用程序的主要部分,其中包含选项卡控制器(TabViewController
)持有各种其他观点。 LogInViewController 执行模态转场DetailEntryViewController
和DetailEntryViewController
然后对 TabViewController 执行模态转场,这样我就有了一种进入应用程序的模态转场链。当用户注销时,我想一路返回 LogInViewController 但当我执行以下操作时:
[self.presentingViewController dismissModalViewControllerAnimated:YES];
...它弹出 TabViewController,我最终回到了DetailEntryViewController
而不是第一个 LogInViewController。有什么方法可以让我轻松地弹回到第一个视图控制器,或者做这个模态转场链会阻止我这样做。我想到了一个好主意,将一些代码放入DetailEntryViewController
viewWillAppear
:如果用户已注销,则会自动弹出,但显然不允许调用来关闭模态控制器viewWillAppear
: viewDidLoad
:, etc.
关于如何实现这一点有什么想法吗?
我认为这不是实现您的应用程序的最佳结构。模态控制器应该用于临时中断程序流程,因此使用模态来获取主要内容并不理想。我这样做的方法是使您的选项卡栏控制器成为窗口的根视图控制器,然后在第一个选项卡的控制器中,通过 viewDidAppear 方法以模态方式呈现登录控制器,因此它将立即出现(您将简要地看到第一个选项卡的视图,除非您取消选中 segue 属性检查器中的“动画”框)。显示该控制器中的详细信息控制器,然后关闭两个模式控制器以返回到您的主要内容。当用户注销时,只需再次显示该登录控制器即可。我是这样实现这个想法的。在第一个选项卡的视图控制器中:
- (void)viewDidLoad {
[super viewDidLoad];
_appStarting = YES;
}
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if (_appStarting) {
[self performSegueWithIdentifier:@"Login" sender:self];
_appStarting = NO;
}
}
然后在最后一个(在你的情况下是第二个)模态视图控制器中,我有一个按钮方法:
-(IBAction)goBackToMain:(id)sender {
[self.view.window.rootViewController dismissViewControllerAnimated:YES completion:nil];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)