swift 如何从 UICollectionView 呈现 activityViewController

How to present activityViewController from UICollectionView in swift

我目前有一个 UICollectionView,我希望能够在其中显示一个 activityViewController 以启用共享(不是来自单元格,而是来自 collectionView 中的 UIView)。问题是下面的代码不起作用,因为 present() 是一个 viewController 方法。

let activityViewController = UIActivityViewController(activityItems: [test], applicationActivities: nil)
present(activityViewController, animated:true, completion:nil)

我已经尝试创建一个 viewController 的实例来调用 present(),但是这不起作用,因为它不在视图层次结构中。

我找到的最接近答案的是提到一个弱委托,但我不确定如何让它起作用。

正在寻找有关如何完成这项工作的任何想法。谢谢

更新 我的层次结构由 viewController HomeViewController 组成,然后我在屏幕的下半部分显示一个 collectionView routeDetailCollectionView。在 routeDetailCollectionView 中,我有一个包含 UIButton shareButton 的 UIView routeHeaderView a。我想在按下 shareButton 时显示 ios 共享菜单。

您可以使用委托与父 viewcontroller 沟通并从那里呈现。 Oru 如果你正在使用导航控制器,你可以从那里展示它

您应该使用以下方法从 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)