0

以下场景:

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

问题:

登录后,我想呈现与移至后台之前完全相同的屏幕。除非在拆分视图(如设置等)的顶部有一个模态视图,否则这工作正常。

我尝试了什么:

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

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

4

3 回答 3

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];
}
于 2013-07-01T13:09:55.527 回答
1

这是因为您 R 在实际加载为 RootViewController 时尝试呈现 VC。

尝试使用这个:

UISplitViewController:

  • 一旦加载了 Root 和 MasterViewController ,您将 UIViewControllers 作为您的 RootViewController 的子视图。从 UIViewController ,如果您想恢复到 RootViewController ,试试这个:
[self.navigationController popToRootViewControllerAnimated:NO];

我只是认为你的问题是相似的。

希望能帮助到你。

于 2013-07-01T09:21:07.833 回答
0

你可以试试这个方法。

根 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。

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

于 2013-07-01T10:21:24.330 回答