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
,然后在屏幕的下半部分显示一个collectionViewRoutedDetailCollectionView
。在routeDetailCollectionView
中,我有一个UIViewrouteHeaderView
a,其中包含UIButtonshareButton
。我想在按下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不在同一个视图层次结构中。我认为这可以工作,但它仍然给我->警告:尝试显示不在窗口层次结构中的视图!我原以为这会奏效,但它仍然给了我->警告:尝试显示不在窗口层次结构中的视图!