我有4个视图控制器:loginVC - > homeVC - > aVC - >的 BVC
我们假设用户当前处于<strong> bVC 视图控制器,并决定切换到另一个应用程序。当用户切换回我的应用程序时,我想提供loginVC来验证用户身份。经过身份验证后,将向用户显示之前的 bVC 视图控制器,以继续他/她正在做的任何事情。我在项目中没有使用导航控制器。
在applicationDidBecomeActive:
方法中,我能够呈现loginVC视图控制器,但是一旦用户通过身份验证,我该怎么做才能显示 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];
}
答案 0 :(得分:0)
1将您的LoginVC实例化并显示为模式
2在用户通过身份验证时将其关闭
//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];
}
答案 1 :(得分:0)
我相信当应用程序变为活动状态时,您需要做的是呈现(或模态)当前View控制器(在本例中为bVC)上的临时viewController。
当呈现视图控制器时,对象或您的bVC不会被破坏,因此一旦用户通过身份验证,您就可以解除 loginView。
[[NSNotificationCenter defaultCenter]addObserver:self
selector:@selector(yourMethod)
name:UIApplicationDidBecomeActiveNotification
object:nil];
如果您需要从任何requiredView控制器提供LoginView
,添加这样的通知可能会有所帮助请参阅PresentingView控制器上的documentation
答案 2 :(得分:0)
你可以通过将loginViewController作为模态来实现,如前所述,但我认为这个功能&#39;会让您的用户离开您的应用,因为他们希望在用户的生活中(首次使用您的应用时)完成一次登录部分。
如果您每次回到应用程序时确实需要用户登录您的应用程序(或服务器),我建议您选择在NSUserDefaults中存储用户的登录信息。
请记住,用户希望尽可能无缝地完成工作,他们真的不想在每次回到您的应用时输入他们的登录名/密码:)