Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在swift中从UICollectionView显示activityViewController_Ios_Swift_Uicollectionview_Swift4_Uiactivityviewcontroller - Fatal编程技术网

Ios 如何在swift中从UICollectionView显示activityViewController

Ios 如何在swift中从UICollectionView显示activityViewController,ios,swift,uicollectionview,swift4,uiactivityviewcontroller,Ios,Swift,Uicollectionview,Swift4,Uiactivityviewcontroller,我目前有一个UICollectionView,我希望能够在其中显示activityViewController以启用共享(不是从单元格,而是从collectionView中的UIView)。问题是以下代码不起作用,因为present()是一种viewController方法 let activityViewController = UIActivityViewController(activityItems: [test], applicationActivities: nil) present

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

let activityViewController = UIActivityViewController(activityItems: [test], applicationActivities: nil)
present(activityViewController, animated:true, completion:nil)
我已经尝试创建一个
viewController
的实例来调用
present()
,但是这不起作用,因为它不在视图层次结构中

我找到的最接近答案的是提到一个软弱的代表,但我不知道如何才能做到这一点

寻找任何关于如何使这项工作的想法。谢谢

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

您可以使用委托与父视图控制器通信,并从那里显示。Oru如果您使用的是导航控制器,您可以从那里演示它

您可以使用委托与父视图控制器通信&从那里演示。Oru如果您使用的是导航控制器,您可以从那里显示它

您应该使用下面的方法从
ui应用程序
获得
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)

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

您在何处演示
UIActivityViewController
?请添加代码。您必须从visibleViewController显示代码。如果直接添加到主视图中,您可以从UIcollectionview的superview中获取它。@MehulSojitra collectionView添加在homeViewController的顶部,因此我认为它没有真正的superview@ivarun我试着把我的设置弄清楚一点,但是代码是大型应用程序的一部分,因此发布更多的代码可能会使这比您在演示
UIActivityViewController
时需要的更复杂?请添加代码。您必须从visibleViewController显示代码。如果直接添加到主视图中,您可以从UIcollectionview的superview中获取它。@MehulSojitra collectionView添加在homeViewController的顶部,因此我认为它没有真正的superview@ivarun我试着把我的设置弄清楚一点,但是代码是一个大型应用程序的一部分,因此发布更多的代码可能会使这比我不使用导航控制器所需要的更复杂。如何使用委派?我想您可以将一个操作从uibutton绑定到homeviewcontroller。当我尝试这样做时,它通过了一个错误,因为homeviewcontroller不在同一视图层次中。我没有使用导航控制器。如何使用委托?我想您可以将一个操作从uibutton绑定到homeviewcontroller。当我尝试这样做时,它通过了一个错误,因为homeviewcontroller不在同一个视图层次结构中。我认为这可以工作,但它仍然给我->警告:尝试显示不在窗口层次结构中的视图!我原以为这会奏效,但它仍然给了我->警告:尝试显示不在窗口层次结构中的视图!