【问题标题】:How to present activityViewController from UICollectionView in swift如何在 swift 中从 UICollectionView 呈现 uiactivityViewController
【发布时间】:2018-10-21 09:54:19
【问题描述】:

我目前有一个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 内,我有一个 UIView routeHeaderView 包含 UIButton shareButton。我想在按下shareButton 时显示ios 共享菜单。

【问题讨论】:

  • 您在哪里展示UIActivityViewController?请添加代码。
  • 你必须从 visibleViewController 中呈现它。如果直接添加在主视图中,则可以从 UIcollectionview 的 superview 中获取。
  • @MehulSojitra collectionView 添加在 homeViewController 之上,所以我认为它没有真正的 superview
  • @ivarun 我试图让我的设置更清楚一点,但代码是大型应用程序的一部分,因此发布更多代码可能会使这比需要的更复杂跨度>

标签: ios swift uicollectionview swift4 uiactivityviewcontroller


【解决方案1】:

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

【讨论】:

  • 我认为这会起作用,但它仍然给我 -> 警告:尝试在 上呈现 其视图不在窗口层次结构中!
【解决方案2】:

您可以使用委托与父视图控制器进行通信并从那里呈现。 Oru 如果你使用的是导航控制器,你可以从那里展示它

【讨论】:

  • 我没有使用导航控制器。我将如何使用委托?
  • 我认为你可以将一个动作从 uibutton 绑定到 homeviewcontroller。
  • 当我尝试这样做时,由于 homeViewController 不在同一个视图层次结构中,因此出现错误
猜你喜欢
  • 1970-01-01
  • 2021-07-29
  • 2015-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多