从Login ViewController呈现之前处于活动状态的ViewController [英] Present the previously active ViewController from the Login 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屋!