因此,通过UIActivityViewController
共享文档的典型方式是类似于此的代码:
let ac = UIActivityViewController(activityItems: [obj], applicationActivities: nil)
ac.popoverPresentationController?.sourceView = self.view
self.navigationController?.presentViewController(ac, animated: true, completion: nil)
问题是我不确定应该是什么类obj
。我有一个文件可以与SolidWorks的eDrawings iOS应用程序一起使用。我知道它的确有效,因为我可以从我的笔记本电脑AirDrop它,它被复制并在我的iPad上正确打开,上面有eDrawings应用程序。
如果您查看包含所述iPad上eDrawings支持的文件类型的邮件消息,您可以看到它在popover中提供了预期的选项。
我的问题是,我怎么能做同样的事情?邮件必须在不明确知道UTI的情况下一般地执行它,那么我的obj
字段应该在我上面提供的示例代码中,以使我的活动视图控制器显示与Mail中相同的选项?我尝试使用NSURL
本地下载的文件以及网络上的URL。这些都不奏效。我认为我应该使用NSData
,但在那时,活动视图控制器如何知道它在Mail中隐式的类型?
有什么想法吗?
答案 0 :(得分:0)
尝试在obj类中实现UIActivityItemSource。
答案 1 :(得分:0)
尝试将“活动视图”视为iOS(无文件环境)中开发人员可以允许其文件逃离设备的地方。
API说给我一个列表,然后填写视图。文档具有详细信息,隐藏在枚举说明中...
用于AirDrop
使用此服务时,可以提供NSString,NSAttributedString,UIImage,ALAsset和NSURL对象作为活动项目的数据。您也可以指定NSURL对象,其内容使用资产库方案。您还可以提供包含列出的数据类型的NSArray或NSDictionary对象。
https://developer.apple.com/documentation/uikit/uiactivity/activitytype/1620665-airdrop
用于邮件
使用此服务时,可以提供指向本地文件的NSString和UIImage对象以及NSURL对象作为活动项目的数据。 要指定NSData对象,您必须实现UIActivityItemSource协议,在activityViewController(:itemForActivityType :)中返回数据对象,并在activityViewController(:dataTypeIdentifierForActivityType :)中返回数据对象的UTI。另外,您可能需要注册适当的映射,以便可以确定MIME类型。
https://developer.apple.com/documentation/uikit/uiactivity/activitytype/1620669-mail