dismissViewControllerAnimated被调用,但ViewController不被解雇

我有一个dismissViewControllerAnimated方法没有closures视图的问题。

这里的应用程序发生了什么是:

  • ItemViewController单元格被选中。
  • 视图被推送到ItemDetailViewController ,细节通过委托发送
  • 用户select“完成”,事件通过委托发送,在ItemViewControllerclosures

所有这些工作除了视图不被解雇,没有错误。 任何人都可以看到什么是错的?

 - (void)itemDetailViewControllerDidFinish:(ItemDetailViewController *)controller { NSLog(@"Controller: %@", controller); // Returns - Controller: <ItemDetailViewController: 0x6b68b60> [self dismissViewControllerAnimated:YES completion:nil]; } 

如果你调用[controller.navigationController popViewControllerAnimated:YES]呢?

对于这个问题,如果你调用[controller dismissViewControllerAnimated:YES completion:nil]而不是自己调用它呢?

答案在这个页面: dismissviewcontrolleranimated-vs-popviewcontrolleranimated

当你没有导航控制器的时候使用dismissViewController。 很可能你正在使用导航控制器,然后使用self.navigationController popViewController来代替。

还要注意lemax他的评论:使用NULL,而不是完成处理程序

我在iOS5中遇到了一个问题,那就是标准完成callback不允许视图完全消失(只有当前的那个模式的推送视图)

 [controller dismissViewControllerAnimated:YES completion:^ { // }]; 

iOS5的解决scheme是没有callback:

 [controller dismissViewControllerAnimated:YES completion:nil]; 

有一个问题,其中调用dismissViewControllerAnimated解除UIViewController中的键盘,但不是视图本身。

解决它通过使用两个电话:

 [self dismissViewControllerAnimated:NO completion:nil]; [self dismissViewControllerAnimated:YES completion:nil]; 

一个是键盘,一个是控制器的animation

你的情况是 – ItemViewController – > ItemDetailViewController(在导航控制器上推)Self.dismissViewController(..)closures一个视图控制器是呈现超过自我(在你的情况下,它是ItemViewController)。 在这里,你没有提出任何风险投资超过自己,而是你推了一个新的风险投资超过导航堆栈。 所以,正确的方法来解散ItemDetailViewController将是

self.navigationController.popViewController(真)。 请阅读dismissViewController(….)的描述以获得更多的清晰度。