首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何剔除一个模态视图控制器,然后立即让呈现视图控制器呈现一个不同的模态视图控制器?

如何剔除一个模态视图控制器,然后立即让呈现视图控制器呈现一个不同的模态视图控制器?
EN

Stack Overflow用户
提问于 2014-01-12 22:56:05
回答 1查看 1.1K关注 0票数 1

我使用一个IIViewDeckController作为我的根视图控制器。它是一个库,允许我有一个滑动菜单视图控制器,类似于facebook应用程序中的滑动菜单。它的工作方式是使用中间视图控制器和左视图控制器启动它,然后将整个对象设置为根视图控制器。下面是在AppDelegate.m中的样子:

代码语言:javascript
复制
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

代码语言:javascript
复制
- (void)openLogin{
    LoginViewController* login = [[LoginViewController alloc] init];
    [self presentViewController:login animated:YES completion:nil]; 
}

login中,用户输入凭据并登录后,我尝试让navStack关闭login,然后立即插入不同的控制器creator

代码语言:javascript
复制
- (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

代码语言:javascript
复制
- (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有关,因为我以前在没有它的其他项目中做过同样的过程,并且没有任何问题。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-12 23:01:41

您会得到此错误,因为openListingCreator正在被调用,而LoginViewController的转换效果仍然是活动的。您可以将[mainFeed openListingCreator];放在[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];的完成块中,也可以直接从LoginViewController中显示creationStack

代码语言:javascript
复制
[self.presentingViewController dismissViewControllerAnimated:YES completion:^{
    [mainFeed openListingCreator];
}];
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21081377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档