调用dismissViewControllerAnimated但不解除ViewController

时间:2012-01-24 15:00:17

标签: iphone objective-c ios ios4 ios5

我遇到了dismissViewControllerAnimated方法没有关闭视图的问题。

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

  • 选择ItemViewController中的单元格。
  • 查看推送 ed至ItemDetailViewController,详细信息通过代理人发送
  • 用户选择'已完成'并通过代理发送事件以在ItemViewController
  • 中关闭

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

- (void)itemDetailViewControllerDidFinish:(ItemDetailViewController *)controller
{
    NSLog(@"Controller: %@", controller);
    // Returns - Controller: <ItemDetailViewController: 0x6b68b60>

    [self dismissViewControllerAnimated:YES completion:nil];
}

5 个答案:

答案 0 :(得分:66)

如果您拨打[controller.navigationController popViewControllerAnimated:YES],该怎么办?

就此而言,如果你打电话给[controller dismissViewControllerAnimated:YES completion:nil]而不是自己打电话怎么办?

答案 1 :(得分:10)

答案在此页面中: dismissviewcontrolleranimated-vs-popviewcontrolleranimated

当您没有navigationcontroller时使用dismissViewController。 很可能你正在使用导航控制器,然后使用   而不是self.navigationController popViewController。

另请注意lemax他的评论:使用NULL,而不是nill for completionhandler

答案 2 :(得分:4)

我在iOS5中遇到了一个问题,标准的完成回调不允许视图完全解散(只有该模态的当前推送视图)

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

iOS5解决方案是没有回调:

[controller dismissViewControllerAnimated:YES completion:nil];

答案 3 :(得分:4)

问题是调用dismissViewControllerAnimated解除了UIViewController中的键盘,而不是视图本身。

使用两个电话解决了这个问题:

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

键盘的瞬间,然后是控制器的动画

答案 4 :(得分:0)

你的情况是 - ItemViewController - &gt; ItemDetailViewController                       (推送导航控制器) Self.dismissViewController(..)关闭一个通过self呈现的视图控制器(在大多数情况下它是ItemViewController)。在这里,你没有提供任何VC而不是自我,而是你在导航堆栈上推送了一个新的VC。因此,解除ItemDetailViewController的正确方法是

self.navigationController.popViewController(真)。请阅读dismissViewController(....)的说明以获得更清晰的信息。