presentViewController 不隐藏弹出框,弹出框出现在呈现的模态视图上

Posted

技术标签:

【中文标题】presentViewController 不隐藏弹出框,弹出框出现在呈现的模态视图上【英文标题】:presentViewController does not hide popover, popover appears on presented modal view 【发布时间】:2015-03-05 03:48:45 【问题描述】:

我正面临这个奇怪的问题,我从视图上的按钮显示一个弹出框。后来我打电话给presentViewController,而不关闭弹出窗口。视图以模态方式呈现。奇怪的是,模态视图不覆盖弹出框,弹出框出现在模态视图的顶部。我在 iPad Retina,ios 7.1 上。在附图中,紫色视图是模态视图,蓝色视图是弹出框。如果有人经历过痛苦并解决了它,请提供帮助。提前致谢。

显示弹出框的代码 -

[self.pop presentPopoverFromRect:[sender frame]
                 inView:[self.navigationController view]
                    permittedArrowDirections:UIPopoverArrowDirectionAny
                                    animated:YES];

呈现模态视图的代码 -

[self presentViewController:anotherVC animated:YES completion:nil];

【问题讨论】:

在展示新的 viewController 之前关闭你的弹出框。 不能解决问题,一旦模式视图被解除,我需要这个弹出框。此外,这不是一个理想的解决方案,它是一种解决方法。任何模态显示的视图都应该隐藏父调用者的所有视图。 【参考方案1】:

违规行似乎是 [self.navigationController 视图]。为什么不做self.view?或者,如果该行是必须的,请执行 [self.navigationController presentViewController...

【讨论】:

不错的观察。已经尝试将 [self.navigationController view] 替换为 [self view] 和 [self.navigationController presentViewController 。不工作。结果相同。 嗯,真可惜。看起来你必须使用“dismissPopoverAnimated”来关闭它,然后再展示新的视图控制器 一旦模式视图被关闭,我需要这个弹出框。此外,这不是一个理想的解决方案,它是一种解决方法。任何模态显示的视图都应该隐藏父调用者的所有视图。【参考方案2】:

API 表示“弹出框一直可见,直到用户在弹出框窗口之外点击或您明确将其关闭。”。如果你使用 UIPopoverController 我认为没有办法解决这个问题。

UIPopoverController Class Reference

【讨论】:

一旦模式视图被关闭,我需要这个弹出框。任何模态显示的视图都应该隐藏父调用者的所有视图。 我同意,但我不确定问题出在哪里。更糟糕的情况是,您可以在模式消失时重新显示弹出窗口【参考方案3】:

解决了这个问题。而不是调用presentViewCONtroller,我说

[UIView transitionWithView:self.view duration:0.5
    options:UIViewAnimationOptionTransitionFlipFromBottom 
    animations:^  [self.view addSubview:anotherVC]; 
    completion:nil];

【讨论】:

以上是关于presentViewController 不隐藏弹出框,弹出框出现在呈现的模态视图上的主要内容,如果未能解决你的问题,请参考以下文章

PresentViewController 在 iOS 中隐藏导航栏

presentViewController 不工作

presentViewController 不存在

PresentViewController:动画不显示在 iPad 上

容器视图中的presentViewController

self.presentingViewController presentViewController 不工作