1

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

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

警告:尝试呈现不在窗口层次结构中的视图!

-(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];
}
4

3 回答 3

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参考很有用。

祝你好运。

于 2013-01-12T09:57:16.340 回答
1

如果你想在另一个模态视图控制器动画出来之后立即呈现一个视图控制器,那么你必须延迟它,否则新的视图控制器将不会出现。

在 iOS 5 之前,您会执行 performSelectorAfterDelay: 0.25 秒。对于 iOS 5 及更高版本,您将不再使用 modelViewController 方法,因为这些方法已被弃用。相反,您使用 presentViewController 方法,它会为您提供一个完成块,在动画完成时调用该块。

于 2013-01-12T07:32:37.650 回答
0

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

于 2013-01-12T05:27:52.000 回答