You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:10:16