如何从UIActivityViewController中排除操作类活动及「保存到文件」选项?
解决UIActivityViewController仅保留备忘录分享的问题
我来帮你搞定这个分享功能的问题~针对你的两个疑问,我逐一解答:
1. 是否有直接排除操作类活动视图的方法?
苹果并没有提供直接批量排除所有操作类(Action)活动的API,但反过来,使用includedActivityTypes只指定你想要保留的活动类型,会比逐个排除不想要的更高效。毕竟你的需求是仅保留「备忘录」,这种方式能一次性过滤掉所有其他活动(包括操作类和其他分享类),代码也更简洁。
如果一定要用排除的方式,就只能像你现在这样,把所有不需要的操作类活动类型逐个加到excludedActivityTypes里,但这种方式容易遗漏,比如你遇到的「保存到文件」就是典型例子。
2. 如何排除「保存到文件」活动选项?
你之前用的自定义rawValue是错误的,iOS 11及以后,「保存到文件」有对应的系统枚举值:UIActivityType.saveToFiles,直接把它加到excludedActivityTypes里就能移除这个选项。
不过更推荐的是用「仅包含」的方式,下面是修改后的代码:
@IBAction func inviteAction(_ sender: UIBarButtonItem) { let inviteText = "..." let actCont = UIActivityViewController(activityItems: [inviteText], applicationActivities: []) // 仅保留备忘录选项,其他所有活动都会被自动过滤 let notesActivityType = UIActivityType(rawValue: "com.apple.mobilenotes.SharingExtension") actCont.includedActivityTypes = [notesActivityType] self.present(actCont, animated: true, completion: nil) }
代码说明:
- 通过
includedActivityTypes只指定备忘录的活动类型,UIActivityViewController只会显示备忘录这一个选项,自动排除了所有操作类活动(包括「保存到文件」「打印」等)。 - 备忘录的活动类型
com.apple.mobilenotes.SharingExtension是正确的,因为它属于第三方分享扩展类型,系统没有提供对应的枚举值,所以需要用rawValue来定义。
如果你坚持要用排除的方式,修正后的excludedActivityTypes应该是这样:
actCont.excludedActivityTypes = [ .print, .assignToContact, .saveToCameraRoll, .copyToPasteboard, .addToReadingList, .saveToFiles, // 正确移除「保存到文件」的枚举值 // 注意:之前你误把备忘录类型加入了排除列表,一定要删掉这行! ]
⚠️ 重要提醒:之前的代码里你把备忘录的活动类型也加到了排除列表,这会导致备忘录选项被隐藏,必须删除这一行!
内容的提问来源于stack exchange,提问作者Ariel Antonio Fundora
相关产品推荐
相关产品推荐

