从Login ViewController提供先前活动的ViewController

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

让我们假设用户目前在bVC视图控制器,并决定切换到另一个应用程序。 当用户切换回我的应用程序,我想呈现loginVCauthentication用户。 一旦通过authentication,先前的bVC视图控制器将呈现给用户以继续他/她正在做的任何事情。 我没有在我的项目中使用导航控制器。

applicationDidBecomeActive:方法中,我能够呈现loginVC视图控制器,但是一旦用户通过身份validation,我该做什么来呈现bVC视图控制器? 我认为应用程序从主动退出时, bVC仍然在堆栈中?

 // 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为模态

2当用户通过身份validation时closures它

 //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]; // Ie 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]; } 

我相信你需要做的是在应用程序变为活动状态时,在当前的视图控制器(在这种情况下是bVC 呈现(或模态)临时视图控制器。

当呈现视图控制器时,对象或您的bVC不会被破坏,因此,只要用户通过身份validation,您就可以简单地closures loginView。

 [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(yourMethod) name:UIApplicationDidBecomeActiveNotification object:nil]; 

如果您需要从任何requiredView控制器提交LoginView,添加这样的通知可能会有所帮助

请参阅PresentingView控制器上的文档

如前所述,你可以通过呈现你的loginViewController来实现这一点,但是我认为这个“特性”会让你的用户离开你的应用程序,因为他们希望login部分在用户的生活中完成一次他们的第一次使用你的应用程序)。

如果您真的需要用户每次回到您的应用程序时都要login您的应用程序(或服务器),我build议您select将用户的login信息存储在NSUserDefaults中。

请记住,用户希望事情尽可能无缝地完成,他们真的不希望每次他们回到你的应用程序时键入他们的login名/密码:)