2013-03-01 102 views
-1

下面是我的导航控制器的层次dismissViewController工作不正常

MainViewController 
     | 
     | 
     DetailViewController 

那我在上DetailViewController

[self presentViewController:reminderController animated:YES completion:nil]; 

以下导航到ReminderViewController后,在某些点上我做

[self dismissViewControllerAnimated:YES completion:nil]; 

但是,它使我回到MainViewController而不是Detai lViewController

这很奇怪。对这个问题有什么想法?

编辑:

我对DetailViewController做presentViewController: reminderController animated: completion:因为reminderController用于发送提醒的原因。就像goole应用程序或其他应用程序一样,当发送某物时,我们正在使用presentViewController。

+0

你为什么不使用push和pop viewcontrollers? – 2013-03-01 19:36:56

+1

如何从MainViewController提供DetailViewController? – colincameron 2013-03-01 19:37:35

+0

@ X-Factor + @ c.cam:参见OP。我刚刚编辑 – tranvutuan 2013-03-01 19:45:58

回答

-1

而不是使用dismissViewController:animated:使用

[self.navigationController popViewControllerAnimated:YES]; 

dismissViewController:animated的删除所有UIViewController,它出现。

如果您阅读UIViewController和UINavigationController引用,您将节省很多麻烦。两次;)

请参阅this post了解更多详情。

+0

你不能使用'[self.navigationController popViewControllerAnimated:YES];'关于OP,因为我在DetailViewController上使用了'presentViewController:reminderController animated:completion:'。 – tranvutuan 2013-03-01 20:00:02

+0

这是不正确的。如果你呈现一个视图控制器(模态),那么你使用dismissViewControllerAnimated:completion:来消除它。 OP的项目还需要进行其他工作。 – rdelmar 2013-03-01 20:37:32

+0

@rdelmar:抱歉,iam糊涂了。为什么我错了。 OP使用模态呈现视图。 – tranvutuan 2013-03-01 20:43:49

2

这里是关于UIViewController类的文档的一个示例:

所述呈现视图控制器负责贬呈现的视图控制器。如果您在呈现的视图控制器本身上调用此方法,它会自动将该消息转发给呈现视图控制器。

如果您连续呈现几个视图控制器,从而构建呈现视图控制器的堆栈,则在堆栈中较低视图控制器上调用此方法会取消其立即子视图控制器以及堆栈上该子级上的所有视图控制器。当发生这种情况时,只有最顶级的观点才会以动画形式被解雇;任何中间视图控制器都可以简单地从堆栈中移除。最顶层的视图使用其模式转换样式被解散,这可能与堆栈中较低视图控制器使用的样式不同。

因此,我认为你应该先使用SEGUE把你DetailViewController,然后呈现reminderController模态,你会以后能够使用dismissViewControllerAnimated:completion:没有解雇DetailViewController解雇。