在弹出窗口中呈现模态视图

Posted

技术标签:

【中文标题】在弹出窗口中呈现模态视图【英文标题】:presenting modal views in a popover 【发布时间】:2010-05-12 22:36:07 【问题描述】:

我正在尝试从显示在弹出窗口中的视图控制器加载模式视图。模态视图加载,但问题是它转换到主视图而不是弹出框内。我错过了什么吗?我认为简单地从弹出窗口中的 vc 启动它会在同一个弹出窗口中呈现模态视图......

下面的代码没什么特别的:

- (IBAction)myButton
ModalVC *controller = [[ModalVC alloc] initWithNibName:@"ModalVC" bundle:nil];

[self presentModalViewController:controller animated:YES];
[controller release]; 

【问题讨论】:

【参考方案1】:

如果你添加

controller.modalPresentationStyle = UIModalPresentationCurrentContext;

在调用 presentModalViewController:animated 之前,您的 ModalVC 应该显示在弹出框内。

在弹出框中以模态方式显示内容的另一种方法是使用属性 modalInPopover。

【讨论】:

这些都不适合我在弹出框内显示相机视图。 在模态控制器(不是呈现控制器)上将 modalPresentationStyle 设置为 UIModalPresentationCurrentContext 确实有效。 那些声称它不起作用的人:你是在你的视图控制器上设置 .modalPresentationStyle ,还是它可能在里面的 UINavigationController ? (需要在导航控制器上设置)【参考方案2】:

不幸的是,您似乎不能这样做,它违反了 HIG。来自 Apple 的View Controller Programming Guide

注意:您应该始终在显示之前关闭可见的弹出框 另一个视图控制器模态。有关何时和 如何在您的应用程序中使用弹出框,请参阅“弹出框(仅限 iPad)” ios 人机界面指南。

【讨论】:

Apple 在 iPad 的 Messages 应用程序中自己执行此操作。在编辑有关联系人的某些数据(例如,他们的特殊铃声)时,他们将在已显示的弹出框内调出一个模态视图控制器。而且,这样做是有道理的。所以,我认为这是正确的行为,尽管 HIG 说了什么。 (事实上​​,根据 Apple 的文档,UIModalPresentationStyle "UIModalPresentationCurrentContext" 就是为这个明确的目的而设计的。) 我假设这个引用意味着你不应该在当前弹出框后面以模态方式呈现另一个视图控制器而不关闭它;我认为这与在弹出窗口中以模态方式呈现视图控制器无关。【参考方案3】:

这是因为你 presentModalViewControllerself。尝试在您的 ViewController (self) 中添加 UIBarButtonItem 并执行以下操作:

[controller presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

其中senderUIBarButtonItem

【讨论】:

好吧,我认为 self 是已经在弹出窗口中的视图控制器,因为这就是代码所在的位置。我已经有一个 barbutton 在弹出窗口中打开了一个视图控制器。我要做的是使用模态转换将弹出窗口中的视图控制器转换为新的。 对不起,我误解了你的问题。我没有加载模式视图inside弹出框...的经验

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

谷歌地图不能在模态弹出窗口上呈现

如何使我的键盘弹出窗口更加流畅,我的视图控制器以模态方式出现?

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

Rails 3-在弹出窗口中的 ajax 调用上呈现部分内容

在弹出窗口中显示多个图像

iOS 在弹出窗口中显示视图控制器