ios - 如何快速呈现来自 UICollectionView 的 activityViewController

标签 ios swift uicollectionview swift4 uiactivityviewcontroller

我目前有一个 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/

相关文章:

ios - UICollectionViewCell Segue 到新的 ViewController

ios - 如何使用 couchbase 在 Swift 4 中通过数据库观察器检索数据?

IOS UserDefault 无法存储在本地

ios - 如何设置动态 UICollectionView 单元格高度?

ios - 如何使用静态库从 iOS 框架声明 libc++.dylib 依赖项

ios - iPhone网络编程

ios - 如何在iOS项目中正确实现Stripe?

ios - 测试目标下未调用 MagicalRecord 完成 block

objective-c - UICollectionVIew、UITableView 还是自定义 View ?

ios - Collectionview 单元后的间距