从模态呈现的视图控制器内部呈现 UIPopoverController

Posted

技术标签:

【中文标题】从模态呈现的视图控制器内部呈现 UIPopoverController【英文标题】:Present UIPopoverController from inside a modally presented view controller 【发布时间】:2011-11-29 20:00:24 【问题描述】:

是否不可能从显示为UIModalPresentationFormsheet 的视图控制器中显示弹出框控制器?还是我错过了什么?

此代码在非模态视图控制器上运行良好,并正确显示弹出框。(WEPopoverController 是来自here 的自定义实现。)

    GenericDataTableViewController *genericDataController = [[GenericDataTableViewController alloc] initWithNibName:@"GenericDataTableViewController" bundle:[NSBundle mainBundle]];

    genericDataController.dataSource = [NSMutableArray arrayWithObjects:@"asli", nil];
    genericDataController.delegate = self;
    genericDataController.contentSizeForViewInPopover = CGSizeMake(300, 46 * [genericDataController.dataSource count]);

    self.popoverController = [[[WEPopoverController alloc] initWithContentViewController:genericDataController] autorelease];
    self.popoverController.delegate = self;
    [self.popoverController presentPopoverFromRect:((UIButton *)sender).frame
                                            inView:self.view
                          permittedArrowDirections:UIPopoverArrowDirectionUp
                                          animated:YES];
    [genericDataController release];

但是当我把它放在模态视图控制器中时,它会在模态控制器下方显示弹出框,即在呈现模态视图的视图控制器上。所以用户是看不到的。

我该如何解决这个问题?

【问题讨论】:

我创建了一个简单的故事板:初始视图有一个按钮,可以对第二个 VC 进行模态搜索。第二个 VC 有一个按钮,可以对第三个 VC 进行弹出框转义。弹出框正确显示。所以是的,这是可能的。 在你的代码中,self是模态VC,还是呈现模态VC的VC? self 是模态VC。我无法理解您的第一条评论抢劫,什么是转场? segue 是故事板中的一个对象,它定义了视图控制器之间的转换。故事板是 ios 5.0 中支持的一种新型 XIB。我使用故事板在模态 VC 上测试弹出框,因为故事板让我无需编写任何代码即可进行测试。 是的,你是对的,问题在于 WEPopoverController 的实现。它似乎工作得如此无懈可击,以至于我从未怀疑过。 UIPopoverController 可以从模态视图控制器呈现。你为什么不写你的评论作为答案?对于以后需要这个问题的其他人来说,这将更具可读性。谢谢:] 【参考方案1】:

答案已在问题的 cmets 中进行了解释,但我在这里对其进行总结以进行更清晰的问答。

如果您的弹出框控制器是UIPopoverController,则从表单内显示弹出框控制器没有任何限制。我的问题是由于WEPopoverController 的实施。

所以,牺牲视觉体验,继续老的UIPopoverController

【讨论】:

同时将按钮添加到navigationController 并使用仅在第一次单击时执行的uipopovercontroller 操作将其呈现为弹出框。在解雇 n 之后显示它的动作选择器没有被执行。

以上是关于从模态呈现的视图控制器内部呈现 UIPopoverController的主要内容,如果未能解决你的问题,请参考以下文章

如何从模态视图控制器调用呈现视图控制器的方法

从 SubView 呈现模态 ViewController

关闭从模态呈现的视图控制器翻转的视图控制器

从 Xib 呈现模态视图控制器

目标 C:如何从 appdelegate 呈现模态视图控制器?

参考从模态(objective-c)呈现视图控制器