模态 Segue 链

2024-04-13

我有一个具有登录视图的 iOS 应用程序(LognnViewController),一旦用户成功通过身份验证,他们就会被带到另一个视图(DetailEntryViewController)输入一些简单的详细信息。
输入详细信息后,用户将进入应用程序的主要部分,其中包含选项卡控制器(TabViewController)持有各种其他观点。 LogInViewController 执行模态转场DetailEntryViewControllerDetailEntryViewController然后对 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(使用前将#替换为@)

模态 Segue 链 的相关文章

随机推荐