我现在有一个UICollectionView可以显示一个activityViewController来启用共享(不是从单元格,而是从collectionView中的UIView)。问题是以下代码不起作用,因为present()是一个viewController方法。

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

我试着创建一个viewController的实例来调用present(),但是这不起作用,因为它不在视图层次结构中。
最接近我找到答案的是提到一个软弱的代表,但我不确定如何使之发挥作用。
想知道怎么做。谢谢
更新
我的层次结构由viewControllerHomeViewController组成,然后在屏幕的下半部分显示collectionViewrouteDetailCollectionView。在routeDetailCollectionView中,我有一个包含UIButtonrouteHeaderView的UIViewshareButtona。我想在按下shareButton时显示ios共享菜单。

最佳答案

您应该使用下面的方法从rootViewController获取UIApplication

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/

10-09 07:03