弹出框关闭后如何在 transitionCoordinator 中安排新的演示文稿

Posted

技术标签:

【中文标题】弹出框关闭后如何在 transitionCoordinator 中安排新的演示文稿【英文标题】:How can I schedule a new presentation in transitionCoordinator after popover dismissal 【发布时间】:2014-11-05 21:00:59 【问题描述】:

我正在更新我的应用程序以支持 ios 8。在某些地方,我会在弹出框关闭后进行模态演示。这是我用于 iOS 7 的代码

[self.POP dismissPopoverAnimated:YES];
// initialization code for self.SMVC
MPTAdvancedSearchNav* nav = [[MPTAdvancedSearchNav alloc]initWithRootViewController:self.SMVC];
nav.modalPresentationStyle = UIModalPresentationFormSheet;
[self.navigationController presentViewController:nav animated:YES completion:nil];

当我在 iOS 8 设备上运行此程序时,我看到 UIModalPresentationFormSheet 动画开始之前有延迟(大约 1/4 秒)。

我做了一些研究,发现这个 WWDC 视频 https://developer.apple.com/videos/wwdc/2014/#214(第 29 分钟)说我应该使用过渡协调器在弹出框关闭后安排新的演示文稿。

问题是,我不知道该怎么做。我想我应该使用

- (void)notifyWhenInteractionEndsUsingBlock:(void (^)(id<UIViewControllerTransitionCoordinatorContext> context))handler

这是我应该使用的方法吗?另外,我如何获得 UIViewControllerTransitionCoordinatorContext

【问题讨论】:

【参考方案1】:

不幸的是,Popovers 仅在 iOS 8 中转换为“演示样式”,因此您仍然需要用于 iOS 7 的旧代码,并在其中为 iOS 8 特定代码提供一个 fork。最重要的是,为了让一切正常工作,您必须放弃 UIPopoverController,因为它不继承自 UIPresentationController,这是在 iOS 8 中专门为弹出框挂钩到过渡系统的要求。 UIPopoverController 在 iOS 8 中所做的只是包装 UIPopoverPresentationController。

但是,我认为有一个更简单的解决方案可以在 7 和 8 中很好地工作:让任何正在创建/呈现 MPTAdvancedSearchNav 的类成为 UIPopoverController 的代表,并实现 didDismissPopover:,并将您的代码移到那里将进行演示。

在此处查看文档,让我知道它是如何工作的 - https://developer.apple.com/Library/ios/documentation/UIKit/Reference/UIPopoverControllerDelegate_protocol/index.html#//apple_ref/doc/uid/TP40009307

【讨论】:

谢谢,这很有帮助。我将解雇从动画更改为不动画,现在效果很好。

以上是关于弹出框关闭后如何在 transitionCoordinator 中安排新的演示文稿的主要内容,如果未能解决你的问题,请参考以下文章

在表格视图中选择项目后无法关闭弹出框

iOS 弹出框在关闭后不会消失

js如何关闭弹出框并刷新母版页中嵌套页面

关闭弹出框后表格视图没有更新?

触摸后关闭弹出框

iOS UITesting 如何关闭弹出框(iPad 弹出框不提醒样式)