如何在使用自适应segue时获得对UIPopoverController的引用?

时间:2014-07-27 03:35:13

标签: ios objective-c segue uipopovercontroller uistoryboardsegue

在我的iOS 7应用中,我通过prepareForSegue中的检查检测到segue是否为popover:

if ([segue isKindOfClass:[UIStoryboardPopoverSegue class]])

但是现在我正在使用自适应segues,在上面的检查中,Present作为Popover segue不再返回true。这是因为segue不再是UIStoryboardPopoverSegue,而是UIStoryboardPopoverPresentationSegue。但是,人们不能简单地添加Presentation字,因为它没有定义。

检测segue何时是自适应segue的弹出窗口,而不是全屏模式演示文稿的适当方法是什么?

而且,如何获得iOS 8 popover的引用?以下是我为iOS 7所做的事情,但又因为它不是UIStoryboardPopoverSegue这会导致崩溃。

UIPopoverController *popover = ((UIStoryboardPopoverSegue *)segue).popoverController;
popover.popoverContentSize = CGSizeMake(380, 1000);

3 个答案:

答案 0 :(得分:5)

实际上没有必要获得iOS 8弹出窗口的引用。您可以直接在显示的视图控制器中访问popoverPresentationController。然后使用dismissViewControllerAnimated关闭视图控制器。您可以直接在通过preferredContentSize呈现的视图控制器中设置弹出窗口内容大小。我发现我不需要在prepareForSegue中获取引用,至少在iOS 8上运行时.iOS 7是一个不同的故事。

答案 1 :(得分:5)

阐述了Joey的回答,这让我看到了实现UIPopoverController以往的新方式。

prepareForSegue:Sender:

中的此代码
        UIViewController *destination = segue.destinationViewController;
        UIPopoverPresentationController *ppc = destination.popoverPresentationController;
        ppc.delegate = self;

是一种将视图控制器成功设置为UIPopoverPresentationController委托的简单方法,与您可能习惯使用旧UIPopoverController的方法非常相似。

当然,当你在这里时,你可能会添加:

[destination setPreferredContentSize:CGSizeMake(300.00f, 300.00f)];

如果你习惯在这里设置UIPopoverController大小。

答案 2 :(得分:0)

这可能不是最简单的方法,但您可以检查目标视图控制器上的popoverPresentationController属性。从那里你可以配置弹出锚点等。

检查UIPopoverPresentationController文档的“配置显示的弹出窗口”部分。 (不知道我们现在是否允许链接到他们,是吗?)

另请注意,现在我们讨论的是UIPopover * Presentation *控制器,而不是UIPopoverControllers。这有点令人困惑......