我正在尝试自定义本机ios UIActivityViewController
,因此它将限制每个UIActivity
,但我用来初始化UIActivityViewController的自定义UIActivity
类型除外。
基本上,我只希望用户看到我的四个自定义UIActivity
。
let items = ["Hello world"]
let activitySheet = CustomUIActivityViewController(
activityItems: items,
applicationActivities: [
CustomMailUIActivity(),
CustomMessagesUIActivity(),
CustomTwitterUIActivity(),
CustomFacebookUIActivity()
]
)
我知道您可以使用activitySheet.excludedActivityTypes = []
来排除不需要的类型,但是您不能排除第三方应用程序,例如Slack。
我想知道是否有任何方法可以解决此问题,并且仅包含自定义applicationActivies
。同样也要删除显示在共享表上的“更多”按钮。任何帮助将不胜感激。
这就是我要实现的目标。
答案 0 :(得分:0)
我的同事能够弄清楚这一点。对于想知道如何在共享表上仅仅显示 applicationActivities
(自定义活动)的人,这就是我的方法。
对于activityItems
,而不是创建字符串数组,请创建自定义数据对象的数组。然后在自定义canPerform(withActivityItems activityItems: [Any])
(UIActivity
的子类)中覆盖UIActivity
方法,如果activityItems[o] is CustomItem
返回true。由于您的activityItems
是自定义的,因此系统不会在共享表上显示其他应用。就是这样。
在下面的示例中,共享页面上只会显示您的CustomUIActivity
。
let items = [CustomItem("Hello world")]
let activitySheet = UIActivityViewController(
activityItems: items,
applicationActivities: [
CustomUIActivity()
]
)
class CustomItem {
let value: String
required init(value: String) {
self.value = value
}
func getValue() -> String {
return self.value
}
}
@objc(CustomUIActivity)
class CustomUIActivity: UIActivity {
override class var activityCategory: UIActivity.Category {
return .share
}
override var activityType: UIActivity.ActivityType? {
return .customuiactivity
}
override var activityTitle: String? {
return "Custom"
}
override var activityImage: UIImage? {
return UIImage(named: "custom-icon")
}
override func canPerform(withActivityItems activityItems: [Any]) -> Bool {
if activityItems.count == 1 && activityItems[0] is CustomItem {
return true
}
return false
}
var textToShare: String?
override func prepare(withActivityItems activityItems: [Any]) {
if let activityItem = activityItems.first as? CustomItem {
self.textToShare = activityItem.getValue
}
}
override func perform() {
// perform your custom activity with `textToShare`
activityDidFinish(true)
}
}
extension UIActivity.ActivityType {
static let customuiactivity =
UIActivity.ActivityType("com.ceylonese.mobile.customuiactivity")
}