调用dismissViewControllerAnimated但不解除ViewController

Ad *_*lor 44 iphone objective-c ios4 ios ios5

dismissViewControllerAnimated没有关闭视图的方法有问题.

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

  • ItemViewController选择单元格.
  • 推送视图,ItemDetailViewController并通过代理发送详细信息
  • 用户选择"完成",并通过代表发送事件以关闭 ItemViewController

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

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

    [self dismissViewControllerAnimated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)

Nic*_*ood 66

如果你打电话[controller.navigationController popViewControllerAnimated:YES]怎么办?

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

  • 对我有用的确切语法:[self.navigationController popViewControllerAnimated:YES]; (9认同)
  • 看起来像self:如果您的页面嵌入在导航控制器中,则dismissviewcontroller不起作用. (3认同)
  • 用 pop 推动并用 dismiss 呈现 (2认同)

Lea*_*der 10

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

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

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

  • 对非对象指针使用NULL.所以你不应该在这里使用NULL. (3认同)

Dan*_*li3 5

我在iOS5中遇到了一个问题,其中标准完成回调不允许该视图完全关闭(仅该模式的当前推送视图)

[controller dismissViewControllerAnimated:YES completion:^ {
     //
 }];
Run Code Online (Sandbox Code Playgroud)

iOS5的解决方案是没有回调:

[controller dismissViewControllerAnimated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)