dismissViewController无法正常工作

时间:2013-03-01 19:34:33

标签: ios cocoa-touch uiviewcontroller

以下是导航控制器的层次结构

MainViewController
      |
      |
      DetailViewController

然后我在DetailViewController上执行以下操作

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

导航到ReminderViewController之后,在某些时候我做了

[self dismissViewControllerAnimated:YES completion:nil];

但是,它将我带回MainViewController而不是DetailViewController

这很奇怪。关于这个问题的任何想法......

已编辑:

我在DetailViewController上执行presentViewController: reminderController animated: completion:的原因是因为reminderController用于发送提醒。就像goole应用程序或其他应用程序一样,在发送时,我们正在使用presentViewController。

2 个答案:

答案 0 :(得分:2)

以下是有关UIViewController类的文档示例:

  

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

     

如果您连续呈现多个视图控制器,从而构建一堆呈现的视图控制器,则在堆栈中较低的视图控制器上调用此方法会解除其直接子视图控制器以及堆栈上该子视图上方的所有视图控制器。发生这种情况时,只有最顶层的视图以动画方式被删除;任何中间视图控制器都可以从堆栈中删除。最顶层的视图使用其模态过渡样式被忽略,这可能与堆栈中较低的其他视图控制器使用的样式不同。

因此,我认为您应首先使用segue来推送DetailViewController,然后以模态方式显示reminderController,您稍后可以使用dismissViewControllerAnimated:completion:解除后,而不会解雇DetailViewController

答案 1 :(得分:-1)

而不是使用dismissViewController:animated:使用

[self.navigationController popViewControllerAnimated:YES];

dismissViewController:animated删除其中的所有UIViewController

如果您阅读UIViewController和UINavigationController参考,您将省去很多麻烦。两次;)

有关详细信息,请参阅this post