繁体   English   中英

从子视图控制器呈现模态视图控制器

[英]Presenting modal view controller from child view controller

在我的应用程序中,我提出了一个模态视图控制器,但我遇到的问题我认为是由于我从子视图控制器呈现视图控制器这一事实。

presentViewController: animated:的调用来自位于导航控制器堆栈上的视图控制器,该导航控制器使用Interface Builder中的“容器视图”包含在另一个视图控制器中。 此外部容器视图控制器在屏幕顶部有一个持久性横幅。

当呈现视图控制器时,它会向上滚动动画,当它到达顶部时,它会进入容器视图控制器的横幅下方。 但是,一旦动画结束,它再次出现在前面,但是在横幅所覆盖的模态视图控制器部分上不可能进行交互。 从子视图控制器呈现模态视图控制器的正确方法是什么?

编辑:

我已经尝试直接访问容器视图控制器,它首先工作,但一旦模态视图控制器被解除,容器视图以某种方式扩展以填充整个屏幕,重叠整个横幅。

编辑:

截图:

模态视图控制器向上滑动并出现在顶部的横幅下方,然后突然跳到前面。

您需要将这两个方法放在AppDelegate中,并从您想要呈现的位置调用这些方法并解除modelviewconroller。

- (void)presentModelView{
    [[[[self.window rootViewController] navigationController] topViewController] presentViewController:controller animated:YES];
}

- (void)dismissModelView{
    [[[[self.window rootViewController] navigationController] topViewController] dismissViewControllerAnimated:YES completion:<#^(void)completion#>:controller animated:YES];
}

我还遇到了这个问题:当从子视图控制器以模态方式调用视图控制器调用dismissViewControllerAnimated时,子视图控制器也被解除。

在界面构建器中玩了一下后,我设法解决了它。

只需将模态显示的视图控制器演示文稿样式更改为全屏 (默认为全屏

迅速

// In the viewController class you're presenting modally
self.modalPresentationStyle = .overFullScreen

在此输入图像描述

我猜你可以这样做:

[self.parentViewController presentViewController:controller animated:YES];

如果你需要从父节点的父节点呈现它,你只需要在self.parentViewController.parentViewController上调用相同的方法

您是否尝试从ChildViewController对象中调用以下内容?

[self presentModalViewController:viewController animated:YES];

您需要在横幅视图上方的视图控制器中显示视图控制器。 最简单的解决方案是:

[[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:controller animated:YES];

警告:这应该适用于大多数情况,但是如果您模拟呈现的视图本身会以模态方式呈现其他视图,则必须小心,在这种情况下,您将收到错误,因为此视图已经有一个呈现的控制器。 如果是这种情况,您可以通过迭代检查presentedViewController属性来跟踪呈现的控制器链,直到找到一个nil的控制器。

正如问题评论中所讨论的那样,我尝试按照描述再现该问题,但不能。 我认为问题是由于视图控制器的混乱呈现,在尝试呈现模态视图控制器时抛出了系统。

暂无
暂无

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

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