是否可以从 UIActivityItemSource 函数返回多个值,并将它们传递给 UIActivityViewController 的 ActivityItems?
我想返回 [message, image, url] 数组并传递给 ActivityItems。但显然,我使用的 switch 代码仅返回一个值,要么是消息,要么是图像,要么是 url,具体取决于选择的活动。
如果我改变:func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any?
to: func.... -> [Any]
?
UIActivityItemSource 抱怨:
“类型‘ActivityItemSource’不符合协议‘UIActivityItemSource’”
并让您使用“-> Any?”插入另一组相同的功能。
也许我不理解如何处理 init(),但如果有人能给我一个解决这个问题的方向,我将不胜感激。
我发现了类似的问题来自 UIActivityItemSource 的多个数据发帖者自己的计算结果是:
“结果我需要做的就是向活动控制器提供多个项目,因为每个活动项目源只能提供一项。”
这是否意味着我需要为消息创建 ActivityItemSource1 类,为图像创建 ActivityItemSource2 类,为 url 创建 ActivityItemSource3 类?并将它们分配给这样的activityItems?:
让activityItems = [ActivityItemSource1(消息:消息),ActivityItemSource2(图像:图像),ActivityItemSource3(url:url)]
=================================================== ===============
class ActivityItemSource: NSObject, UIActivityItemSource {
var message: String!
var image: UIImage!
var url: URL!
init(message: String, image: UIImage, url: URL) {
self.message = message
self.image = image
self.url = url
}
func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
return message
}
func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any? {
switch activityType {
case UIActivity.ActivityType.postToFacebook:
return image
case UIActivity.ActivityType.postToTwitter:
return message
case UIActivity.ActivityType.mail:
return message
case UIActivity.ActivityType.copyToPasteboard:
return message
case UIActivity.ActivityType.markupAsPDF:
return message
case UIActivity.ActivityType.message:
return message
case UIActivity.ActivityType.postToFlickr:
return image
case UIActivity.ActivityType.postToTencentWeibo:
return message
case UIActivity.ActivityType.postToVimeo:
return image
case UIActivity.ActivityType.print:
return message
case UIActivity.ActivityType(rawValue: "com.apple.reminders.RemindersEditorExtension"):
return message
case UIActivity.ActivityType(rawValue: "com.apple.mobilenotes.SharingExtension"):
return message
default:
return message
}
}
}
class TodaysTasksTableViewcontroller: TableViewController {
var image: UIImage
var message: String
var url: URL
image = UIImage(named: "PoliPoliIconLarge")!
message = "I will complete the following task(s) today :"
url = URL(string: "http://www.beckos.com")!
let activityItems = [ActivityItemSource(message: message, image: image, url: url)]
let activityVC = UIActivityViewController(activityItems: activityItems, applicationActivities: nil)
// Exclude some activities from share popup screen
activityVC.excludedActivityTypes = [
UIActivity.ActivityType.assignToContact,
UIActivity.ActivityType.print,
UIActivity.ActivityType.addToReadingList,
UIActivity.ActivityType.saveToCameraRoll,
UIActivity.ActivityType.openInIBooks,
//UIActivity.ActivityType(rawValue: "com.apple.reminders.RemindersEditorExtension"),
//UIActivity.ActivityType(rawValue: "com.apple.mobilenotes.SharingExtension"),
]
self.present(activityVC, animated: true, completion: nil)
................
}