我试图重现 Apple 对 Safari 所做的事情,其中有一个共享按钮可以共享当前页面,但还提供了一些额外的(和内部)选项来处理页面。
例如,我们可以选择添加到阅读列表、添加为书签等。
这些选项是 Safari 独有的,因为它们不是默认共享表的一部分。如何在这样的共享表下隐藏我自己的应用程序的某些功能?
我做了一些研究,我只发现自定义活动(据我所知)是共享表第二行中的方形按钮(部分隐藏在我的屏幕截图中)。
我还发现了扩展,但我认为这对我的情况没有帮助,因为它允许为每个应用程序全局自定义共享表,并且我需要在我的应用程序运行时添加选项。
当您初始化共享表(又名UIActivityController)时,系统会要求您提供一组applicationActivities,这是您的自定义内部/共享操作将进行的地方。
您应该只是子类化UIActivity,并覆盖文档指定的所需成员:
activityTypeactivityTitleactivityImagecanPerform(withActivityItems:)prepare(withActivityItems:)activityCategory
为了让您UIActivity出现在共享片底部的菜单按钮,请确保您返回.action的activityCategory。如果您返回.share,它将在顶部显示为一个方形按钮。
例子:
// dummy implementation
class Foo: UIActivity {
override var activityTitle: String? { "Foo" }
override var activityType: UIActivity.ActivityType? { UIActivity.ActivityType("Foo") }
override var activityImage: UIImage? { UIImage(systemName: "doc.on.doc.fill") }
override func canPerform(withActivityItems activityItems: [Any]) -> Bool {
true
}
override class var activityCategory: UIActivity.Category { .action }
override func prepare(withActivityItems activityItems: [Any]) {
print("Preparing Foo!")
}
override func perform() {
print("Performed Foo!")
}
}
...
let shareSheet = UIActivityViewController(activityItems: [stuffToShare], applicationActivities: [Foo()])
Run Code Online (Sandbox Code Playgroud)
输出:
如果我.share改用:
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |