从Login ViewController呈现之前处于活动状态的ViewController [英] Present the previously active ViewController from the Login ViewController

查看:84
本文介绍了从Login ViewController呈现之前处于活动状态的ViewController的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有4个视图控制器:loginVC-> homeVC-> aVC-> bVC .

I have 4 view controllers: loginVC -> homeVC -> aVC -> bVC.

假设用户当前位于 bVC 视图控制器上,并决定切换到另一个应用程序.当用户切换回我的应用程序时,我想提供loginVC来对用户进行身份验证.身份验证完成后,将向用户显示以前的 bVC 视图控制器,以继续执行他/她所做的任何事情.我没有在项目中使用导航控制器.

Let's assume the user is currently at bVC view controller and decided to switch to another app. When the user switch back to my app, I want to present the loginVC to authenticate the user. Once authenticated, the previous bVC view controller is to be presented to the user to continue whatever he/she was doing. I'm not using Navigation Controller in my project.

applicationDidBecomeActive:方法中,我能够显示loginVC视图控制器,但是一旦对用户进行身份验证,我该如何显示 bVC 视图控制器?我认为当应用程序退出活动状态时, bVC 仍在堆栈中吗?

In applicationDidBecomeActive: method, I was able to present the loginVC view controller, but once the user is authenticated, what do I do present the bVC view controller? I assume bVC is still on the stack when the app resign from active?

// AppDelegate.m
-(void) applicationDidBecomeActive: (UIApplication*) application {

    NSString *storyboardId = @"LoginIdentifier";
    self.window.rootViewController = [self.window.rootViewController.storyboard instantiateViewControllerWithIdentifier:storyboardId];  
}

// loginVC.m
-(void)authenticateSuccessful {
    // This doesn't do anything... as I want to present bVC
    [self dismissViewControllerAnimated:YES completion:nil];
}

推荐答案

1实例化并显示您的LoginVC为模态模式

1 Instantiate and show your LoginVC as modal one

2验证用户身份后将其关闭

2 Dismiss it when a user is authenticated

//AppDelegate.m
- (UIViewController *)visibleViewController:(UIViewController *)rootViewController
{
    if (rootViewController.presentedViewController == nil)
    {
        return rootViewController;
    }
    if ([rootViewController.presentedViewController isKindOfClass:   [UINavigationController class]])
    {
        UINavigationController *navigationController =    (UINavigationController *)rootViewController.presentedViewController;
        UIViewController *lastViewController = [[navigationController viewControllers] lastObject];

        return [self visibleViewController:lastViewController];
    }
    if ([rootViewController.presentedViewController isKindOfClass:[UITabBarController class]])
    {
        UITabBarController *tabBarController = (UITabBarController *)rootViewController.presentedViewController;
        UIViewController *selectedViewController = tabBarController.selectedViewController;

        return [self visibleViewController:selectedViewController];
     }

     UIViewController *presentedViewController = (UIViewController *)rootViewController.presentedViewController;

     return [self visibleViewController:presentedViewController];
}

-(void) applicationDidBecomeActive: (UIApplication*) application {
    NSString *storyboardId = @"LoginIdentifier";
    UIViewController *lvc = [self.window.rootViewController.storyboard instantiateViewControllerWithIdentifier:storyboardId];
    // I.e show it modally instead of putting to rootViewController
    UIViewController *visibleVC = [self visibleViewController:self.window.rootViewController];
    [visibleVC presentViewController:lvc animated:NO completion:NULL];
}

// loginVC.m
-(void)authenticateSuccessful {
    [self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
}

这篇关于从Login ViewController呈现之前处于活动状态的ViewController的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆