Ios 模式视图控制器上的登录视图控制器

Ios 模式视图控制器上的登录视图控制器,ios,login,modal-dialog,uisplitviewcontroller,Ios,Login,Modal Dialog,Uisplitviewcontroller,以下场景: 我的iPad应用程序有一个SplitViewController作为主要的VC。启动应用程序(新的或从后台)后,我有一个全屏登录视图,输入正确的密码后,该视图(显然)消失 问题: 登录后,我想呈现与移动到后台之前完全相同的屏幕。除非在分割视图的顶部有一个模式视图(如设置等),否则这种方法可以正常工作 我的尝试: 在AppDelegate中,我存储我的self.window.rootViewController,将登录vc设置为我的根vc,登录后,我将存储的根vc设置为实际根vc。但是

以下场景:

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

问题:

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

我的尝试:

在AppDelegate中,我存储我的self.window.rootViewController,将登录vc设置为我的根vc,登录后,我将存储的根vc设置为实际根vc。但是,(模式)设置视图不可见,无法再次打开(警告:尝试在已显示VC的SplitVC上显示VC)。事实上,任何其他模式视图都无法打开(除非应用程序正确关闭)


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

这是因为您试图在VC实际加载为RootViewController时显示它

尝试使用以下方法:

UISplitViewController:

  • 加载根视图和主视图控制器以及主视图控制器后,您将使UIViewControllers成为应用程序的子视图 RootViewController。。如果要还原,请从UIViewController 返回RootViewController,尝试以下操作:
我只是觉得你的问题很相似

希望有帮助。

你能试试这种方法吗

根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显示登录页面

- (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
}

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

我所做的是:

创建一个属性,该属性可以存储我的模式呈现VCs(它们都嵌入到UINavigationController中)

创建登录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(如果可用)


我不想介绍任何目前是根vc的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];
if (self.navController) {
    [self.window.rootViewController presentViewController:self.navController animated:NO completion:nil];
}