我目前有一个 UICollectionView
,我希望能够在其中显示一个 activityViewController
以启用共享(不是来自单元格,而是来自 UIView
在 collectionView 中)。问题是下面的代码不起作用,因为 present()
是一个 viewController 方法。
let activityViewController = UIActivityViewController(activityItems: [test], applicationActivities: nil)
present(activityViewController, animated:true, completion:nil)
我已经尝试创建一个 viewController
的实例来调用 present()
,但是这不起作用,因为它不在 View 层次结构中。
我找到的最接近答案的是提到一个弱委托(delegate),但我不确定如何让它起作用。
正在寻找有关如何使这项工作发挥作用的任何想法。谢谢
更新
我的层次结构包含一个 viewController HomeViewController
,然后我在屏幕的下半部分显示一个 collectionView routeDetailCollectionView
。在 routeDetailCollectionView
中,我有一个包含 UIButton shareButton
的 UIView routeHeaderView
。我想在按下 shareButton
时显示 ios 共享菜单。
最佳答案
您应该使用以下方法从 UIApplication
获取 rootViewController
func topMostController() -> UIViewController {
var rootViewController: UIViewController = UIApplication.shared.keyWindow!.rootViewController!
while (rootViewController.presentedViewController != nil) {
rootViewController = rootViewController.presentedViewController!
}
return rootViewController
}
之后,使用rootViewController
呈现UIActivityViewController
let rootViewController = topMostController()
let activityViewController = UIActivityViewController(activityItems: [test], applicationActivities: nil)
rootViewController?.present(activityViewController, animated:true, completion:nil)
关于ios - 如何快速呈现来自 UICollectionView 的 activityViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50284559/