2014-01-12 169 views
1

我使用的是IIViewDeckController作爲我的根視圖控制器。這是一個圖書館,讓我有一個滑動菜單視圖控制器類似於facebook應用程序中的滑動菜單。它通過使用中心和左視圖控制器啓動它,然後將整個事物設置爲根視圖控制器來工作。下面是一個看起來像在AppDelegate.m如何解除模態視圖控制器,然後立即讓呈現視圖控制器呈現不同的模態視圖控制器?

FeedViewController* mainFeed = [[FeedViewController alloc] init]; 
UINavigationController* mainStack = [[UINavigationController alloc] initWithRootViewController:mainFeed]; 

MenuViewController* sideMenu = [[MenuViewController alloc] init]; 

IIViewDeckController* viewDeck = [[IIViewDeckController alloc] initWithCenterViewController:mainStack leftViewController:sideMenu]; 

self.window.rootViewController = viewDeck; 

當在中心視圖控制器(navStack),我有一個按鈕,按下時,提出了一個模式視圖控制器,login

- (void)openLogin{ 
    LoginViewController* login = [[LoginViewController alloc] init]; 
    [self presentViewController:login animated:YES completion:nil]; 
} 

login,用戶輸入憑證並登錄後,我嘗試讓navStack解僱login,然後立即推入不同的控制器creator

- (void)dismissLoginController{ 
    //get a reference to the mainFeed 
    IIViewDeckController* viewDeck = (IIViewDeckController*)self.presentingViewController; 
    UINavigationController* navStack = (UINavigationController*)viewDeck.centerController; 
    FeedViewController* mainFeed = (FeedViewController*)navStack.topViewController; 

    //have it dismiss login, then push creator 
    [self.presentingViewController dismissViewControllerAnimated:YES completion:nil]; 
    [mainFeed openListingCreator]; 
} 

openListingCreatormainFeed

- (void)openListingCreator{ 
    ListingCreatorViewController* creator = [[ListingCreatorViewController alloc] init]; 
    UINavigationController* creationStack = [[UINavigationController alloc] initWithRootViewController:creator]; 
    [self presentViewController:creationStack animated:YES completion:nil]; 
} 

我得到的錯誤是:Warning: Attempt to present <UINavigationController: 0xa40c790> on <IIViewDeckController: 0xa843000> whose view is not in the window hierarchy!

我假設這是因爲IIViewDeckController不是在屏幕上時,我要求它呈現視圖控制器。然而openListingCreator被稱爲後我忽視login視圖控制器,所以我不知道它爲什麼這樣做。我相信這與IIViewDeckController有關,因爲我在其他沒有它的項目中完成了同樣的確切過程,並且沒有任何問題。

任何想法?

回答

2

你得到這個錯誤,因爲openListingCreator被調用,而LoginViewController的轉換效果仍然有效。您可以將[mainFeed openListingCreator];置於[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];的完成塊中,或直接從LoginViewController中提出creationStack

[self.presentingViewController dismissViewControllerAnimated:YES completion:^{ 
    [mainFeed openListingCreator]; 
}]; 
相關問題