我使用的是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有关,因为我在其他没有它的项目中完成了同样的确切过程,并且没有任何问题。
任何想法?