显示另一个后,关闭一个模态视图控制器

时间:2013-01-12 05:02:07

标签: ios uiviewcontroller

我做了一些研究并阅读了我在这里找到的其他答案,但没有找到任何实际有用的东西。我有一个应用程序,当发布的东西我想去帖子,如果在查看帖子时按下后退按钮它应该返回两个视图基本上跳过撰写视图。

以下是我尝试过但它给出了

警告:尝试显示其视图不在窗口层次结构中!

-(IBAction)post{
    [[self presentingViewController] dismissModalViewControllerAnimated:NO];
}

-(void)viewDidDisappear:(BOOL)animated{
    [super viewDidDisappear:animated];
    ViewPostViewController *dvController = [[ViewPostViewController alloc] initWithNibName:@"ViewPostViewController" bundle:[NSBundle mainBundle]];
    UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:dvController];
    nc.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    [self presentModalViewController:nc animated:NO];
    [nc release];
}

3 个答案:

答案 0 :(得分:3)

如果您尝试创建这样的视图层次结构,您可能应该使用这些:

[self.navigationController pushViewController:ViewController animated:BOOL completion:nil];
[self.navigationController popViewControllerAnimated:BOOL completion:nil];

而不是:

[self presentViewController:ViewController animated:BOOL completion:nil];
[self dimissViewControllerAnimated:BOOL completion:nil];

PresentViewController通常用于显示单个视图控制器,然后将其关闭,一般情况下,当您想要在链中显示多个视图控制器时,然后按照自己的方式备份链。

前者是可取的,因为它使用堆栈概念来推送和弹出视图控制器。因此,您可以从设置为根视图控制器的初始列表开始,按下后期撰写视图,然后按下第三个视图以转到发布。然后,当您想通过弹出两个视图控制器返回第一个视图控制器时,您可以使用:

[self popToRootViewControllerAnimated:BOOL completion:nil];

您可能会发现UINavigationController参考有用。

祝你好运。

答案 1 :(得分:0)

我对你要做的事感到有些困惑。如果你正在使用导航控制器,你应该做推动和弹出,而不是呈现和解雇。如果你想使用导航控制器,那么你可以使用popToViewController:animated:返回任何特定的控制器而不通过其间的控制器。但是,您必须创建一个自定义后退按钮,或者在代码中执行此操作,因为标准后退按钮只会将您带回到上一个视图控制器。

答案 2 :(得分:0)

如果要在另一个模态视图控制器动画输出之后立即显示视图控制器,则必须延迟它,否则新的视觉控制器将不会出现。

在iOS 5之前

你会做一个performSelectorAfterDelay:类似于0.25秒。对于iOS 5及更高版本,您不再使用modelViewController方法,因为这些方法已被弃用。而是使用presentViewController方法,它们为您提供在动画完成时调用的完成块。