我使用的是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];
}
openListingCreator
在mainFeed
:
- (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有關,因爲我在其他沒有它的項目中完成了同樣的確切過程,並且沒有任何問題。
任何想法?