在我的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);
答案 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。这有点令人困惑......