2013-07-01 216 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