2013-07-01 219 views
0

以下情形:登录视图控制器在模态视图控制器

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

问题:

登录后,我想提出这是那里之前移动到背景完全相同的画面。这工作得很好,除非在分割视图之上有一个模式视图(如设置等)。

我试了一下:

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

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

回答

1

我所做的是以下几点:

创建一个可以存储我的模态属性呈现风险投资(他们都嵌入在一个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]; 
} 
1

这是b'co​​z你尝试呈现VC,而它实际上是作为RootViewController加载。

尝试使用这样的:

UISplitViewController:

  • 一旦加载根,以及MasterViewControlller,你会让UIViewControllers作为子视图为您 RootViewController的。从UIViewController中,如果你想恢复 回到RootViewController,试试这个:
[self.navigationController popToRootViewControllerAnimated:NO]; 

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

希望它有帮助。

+0

我不想呈现任何当前是root vc的vc。我编辑了我的问题,因为它似乎很混乱(请参阅部分*第二次尝试*)。另外,我应该在哪里放置该行? – Marc

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。

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

+0

谢谢,我现在采用了类似的方法 – Marc