繁体   English   中英

调用dismissViewControllerAnimated但不解除ViewController

[英]dismissViewControllerAnimated is called but ViewController is not dismissed

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

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

  • 选择了ItemViewController单元格。
  • View 被推送到ItemDetailViewController ,细节通过委托发送
  • 用户选择“完成”,并通过委托发送事件以在ItemViewController关闭

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

- (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

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

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

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

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

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

[controller dismissViewControllerAnimated:YES completion:nil];

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

通过使用两个调用解决它:

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

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

你的情况是 - ItemViewController - > ItemDetailViewController(推送在navigationController上)Self.dismissViewController(..)解除一个通过self呈现的视图控制器(在你的情况下它是ItemViewController)。 在这里,你没有提供任何VC而不是自我,而是你在导航堆栈上推送了一个新的VC。 所以,正确的解雇ItemDetailViewController的方法就是

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM