2013-01-12 57 views
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]; 
} 
+0

您在项目中使用导航控制器吗? – Zen

回答

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参考价值。

祝你好运。

+0

我同意使用导航控制器的应用程序,但如果根是SplitViewController,则不会工作。任何解决方案? –

+0

我不确定我是否理解你的问题,但从我读过的内容来看,Apple坚持认为你应该始终在应用中显示SplitViewController;没有推动或弹出。这可能有所帮助:[http:// stackoverflow。com/questions/2633532/navigate-to-a-splitviewcontroller] – TheEnigma2112

+0

我相信要求是它始终是根,不一定总是可见的 - 模态视图没问题。在我的情况下,我显示一个模式视图和3个屏幕序列,所以我将一个导航控制器嵌入到该模式视图中。我通过在第三个屏幕之后关闭整个导航控制器来工作,并按照我的意愿返回到splitViewController。 –

0

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

+0

我将如何回到标签视图?因为我在创建项目 – user577732

+0

@ user577732时使用了xcode设置的选项卡应用程序,所以我不知道。你没有提到你正在使用基于标签的应用程序。您需要编辑您的问题并完整描述您的应用程序结构。 – rdelmar

0

如果您想要在另一个模式视图控制器已经动画化之后呈现视图控制器,那么您必须延迟它,否则新的视图控制器将不会出现。

在iOS 5之前,你会做一个performSelectorAfterDelay:有0.25秒的东西。对于iOS 5及更高版本,您不再使用modelViewController方法,因为已弃用这些方法。相反,您可以使用presentViewController方法,该方法会为您提供一个在动画完成时调用的完成块。

相关问题