登录视图控制器over modal View Controller

时间:2013-07-01 08:56:07

标签: ios login modal-dialog uisplitviewcontroller

以下情形:

我的iPad应用程序有一个SplitViewController,因为它是主VC。启动应用程序(新的或从后台)后,我有一个全屏登录视图,显然在输入正确的密码后会消失。

问题:

登录后,我想呈现与移动到背景之前完全相同的屏幕。这样可以正常工作,除非在分割视图的顶部有一个模态视图(如设置等)。

我尝试了什么:

在AppDelegate中,我存储了我的self.window.rootViewController,将登录vc作为我的root vc,登录后我将存储的根VC设置为实际根VC。但是(模态)设置视图不可见,无法再次打开(警告:尝试在已经呈现VC的SplitVC上显示VC)。实际上,除非app正确关闭,否则不能打开其他模态视图。

第二次尝试:我没有将登录VC设置为root VC,而是将其作为全屏模式视图显示在我的拆分视图之上。这产生了与第一次尝试相同的错误消息,但结果不同。进入后台模式后,根本不会显示登录VC(因为已有模态视图)。

3 个答案:

答案 0 :(得分:1)

这是b'co​​z你试图在它实际作为RootViewController加载时呈现VC。

尝试使用:

  

UISplitViewController:

     
      
  • 一旦加载了Root和MasterViewControlller,你将把UIViewControllers作为你的SubViews   RootViewController ..来自UIViewController,如果你想恢复   回到RootViewController,试试这个:
  •   
[self.navigationController popToRootViewControllerAnimated:NO];

我只是觉得你的问题很相似。

希望它有所帮助。

答案 1 :(得分:1)

我做的是以下内容:

创建一个可存储我模态呈现的VC的属性(它们都嵌入在UINavigationController中)

@property (nonatomic) UINavigationController *navController;

创建登录vc时,我存储我的模态vc(可能是nil,这很好),将其关闭并显示登录vc

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
LoginViewController *loginViewController =  [storyboard instantiateViewControllerWithIdentifier:@"LoginView"];

self.navController = (UINavigationController *)self.window.rootViewController.presentedViewController;
if (self.navController) {
    [self.navController dismissViewControllerAnimated:NO completion:nil];
}
[self.window.rootViewController presentViewController:loginViewController animated:NO completion:nil];

当登录成功时,我会关闭登录vc并恢复模态vc(如果可用)

if (self.navController) {
    [self.window.rootViewController presentViewController:self.navController animated:NO completion:nil];
}

答案 2 :(得分:0)

你能这样试试。

Root VC是主屏幕而不是登录页面。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

在上面的代码中,将您的登录页面显示给根VC。

- (void)applicationDidBecomeActive:(UIApplication *)application{
    //Use below method or similar method to remove any presented VC on Root VC
    if ([((UINavigationController *)self.window.rootViewController).visibleViewController isKindOfClass:[RLSplashViewController class]]) {
            NSLog(@"AppDelegate dismiss splash page");
            [self.window.rootViewController dismissViewControllerAnimated:NO completion:nil];
        }
    //And present your login VC
}

在上面的代码中,首先非常重要,删除根VC上显示的任何VC。然后将登录页面显示给您的根VC。

我目前正在使用这种方式来呈现启动页面(来自后台或新版),在您的情况下,它是登录页面。希望这对你的情况有帮助:))