如何在iPhone和iPad上呈现UIActivityViewController

呈现UIActivityViewController来共享iOS应用程序中的项目是一项非常简单的任务。

 让activityVC = UIActivityViewController(activityItems:[“要共享的字符串”],applicationActivity:nil)present(activityVC,动画:true,完成:nil) 

呈现UIActivityViewContoller模态在iPhone上效果很好:

但是,这会导致iPad崩溃:

 ***由于未捕获的异常“ NSGenericException”而终止应用程序,原因:“您的应用程序已呈现UIActivityViewController()。  在其当前特征环境中,具有此样式的UIActivityViewController的modalPresentationStyle为UIModalPresentationPopover。  您必须通过视图控制器的popoverPresentationController提供此弹出窗口的位置信息。  您必须提供sourceView和sourceRect或barButtonItem。  如果在显示视图控制器时不知道此信息,则可以在UIPopoverPresentationControllerDelegate方法-prepareForPopoverPresentation中提供它。 

该错误信息不言自明。 UIActivityViewController在iPad上的弹出窗口中显示。 甚至文档都提到了这一点

 在iPad上,必须在弹出窗口中显示视图控制器。 

因此,在iPad上,您必须通过提供sourceView和sourceRect或barButtonItem来配置popoverPresentationController。

 让activityVC = UIActivityViewController(activityItems:[“要共享的字符串”],applicationActivity:nil)present(activityVC,动画:true,完成:nil) 
如果让popOver = activityVC.popoverPresentationController {
popOver.sourceView = self.view
//popOver.sourceRect =
//popOver.barButtonItem
}