如何从 UIActivity 控制器中删除“添加到 iCloud Drive”?
Posted
技术标签:
【中文标题】如何从 UIActivity 控制器中删除“添加到 iCloud Drive”?【英文标题】:How to Remove "Add to iCloud Drive" from UIActivity Controller? 【发布时间】:2017-07-04 06:31:54 【问题描述】:我想从共享 UIActivity 控制器中删除“iCloud 驱动器”选项,这是一个快照。
我试过了,但它在 swift 3 中不起作用。
activityViewController.excludedActivityTypes = [.assignToContact,.copyToPasteboard,.print,.saveToCameraRoll,.addToReadingList,UIActivityType(rawValue: "com.apple.reminders.RemindersEditorExtension"),UIActivityType(rawValue: "com.apple.mobilenotes.SharingExtension"),UIActivityType(rawValue: "com.apple.iCloudDrive.ShareExtension"),UIActivityType(rawValue: "com.apple.mobileslideshow.StreamShareService")]
【问题讨论】:
你是如何创建activityViewController
的?
让 activityViewController = UIActivityViewController(activityItems: [media as Any], applicationActivities: nil) activityViewController.popoverPresentationController!.sourceView = self
media
对象包含什么?
媒体只能是图片或视频
【参考方案1】:
可能会有所帮助,具体取决于版本:
Apple 不断更改此扩展的捆绑 ID。您可能也需要排除它,但取决于 ios SDK 版本:
UIActivityType(rawValue: "com.apple.CloudDocsUI.AddToiCloudDrive")
用户选择后的活动项目提供者:
您还可以将 UIActivityItemProvider 对象而不是原始对象传递给您的 UIActivityViewController 初始化程序。不幸的是,这不会改变 UI 中启用的选项,但如果用户选择后没有返回任何项目,则会退出。
首先,为您的提供者创建一个新类。您也可以使用它来根据不同的提供者返回不同的内容! IE。用于邮件的图像和文本,仅用于 iMessage 的文本。
class ShareActivityItemProvider: UIActivityItemProvider
override func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivityType) -> Any?
print("activity type selected: \(activityType.rawValue)")
// These are your accepted activity types
if activityType == .postToFacebook || activityType == .postToTwitter || activityType == .postToWeibo || activityType == .mail || activityType == .message
return placeholderItem
return nil
然后你像这样初始化你的 UIActivityItemProvider:
let avc = UIActivityViewController(activityItems: [ShareActivityItemProvider(placeholderItem: "Test message or any object")], applicationActivities: nil)
或者,做你想做的事的老套但合法的方式:
在上面之后,您可以添加一个占位符为空的 UIImage,删除现在可用的其他选项,并且只从您的提供者返回您想要的:
let avc = UIActivityViewController(activityItems: [ShareActivityItemProvider(placeholderItem: "Test message or any object"), ShareActivityItemProvider(placeholderItem: UIImage())], applicationActivities: nil)
avc.excludedActivityTypes = [.assignToContact, .saveToCameraRoll, ... others ...]
class ShareActivityItemProvider: UIActivityItemProvider
override func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivityType) -> Any?
print("activity type \(activityType.rawValue) \(activityType)")
if placeholderItem is String, activityType == .postToFacebook || activityType == .postToTwitter || activityType == .postToWeibo || activityType == .mail || activityType == .message
return placeholderItem
return nil
【讨论】:
您能否为此提供客观的 c 代码? @mm282以上是关于如何从 UIActivity 控制器中删除“添加到 iCloud Drive”?的主要内容,如果未能解决你的问题,请参考以下文章
如何删除 UIActivityViewController 中的原始 WhatsApp UIActivity?
如何在 ios 的 UIactivity 视图控制器中仅显示 facebook、twitter 和电子邮件(目标 c)?
如何向 SFSafariViewController 添加自定义活动?