我使用一个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 in 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有关,因为我以前在没有它的其他项目中做过同样的过程,并且没有任何问题。
有什么想法吗?
发布于 2014-01-12 23:01:41
您会得到此错误,因为openListingCreator正在被调用,而LoginViewController的转换效果仍然是活动的。您可以将[mainFeed openListingCreator];放在[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];的完成块中,也可以直接从LoginViewController中显示creationStack。
[self.presentingViewController dismissViewControllerAnimated:YES completion:^{
[mainFeed openListingCreator];
}];https://stackoverflow.com/questions/21081377
复制相似问题