Можно ли вернуть несколько значений из функции UIActivityItemSource и передать их в actionItems UIActivityViewController?
Я хочу вернуть массив [message, image, url] и передать в actionItems.Но код переключателя, который я использовал, возвращает только одно значение, либо сообщение, изображение, либо URL, в зависимости от того, какое действие выбрано, очевидно.
Если я изменю: func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any?
на: func.... -> [Any]
?
UIActivityItemSource жалуется:
"Тип 'ActivityItemSource' не соответствует протоколу 'UIActivityItemSource'"
и позволяет вставлять другой набор тех же функций с«-> Любой?»
Может быть, я не понимаю, как обращаться с init (), но был бы признателен, если бы кто-нибудь мог дать мне направление, чтобы решить эту проблему.
Я нашел похожеевопрос на Несколько данных из UIActivityItemSource , и сам автор понял, что: «Оказалось, все, что мне нужно было сделать, это предоставить несколько элементов контроллеру операций, поскольку каждый источник элементов деятельности может предоставить только один элемент».
Означает ли это, что мне нужно сделать класс ActivityItemSource1 для сообщения, класс ActivityItemSource2 для изображения, класс ActivityItemSource3 для URL?и назначить их для элементов ActivityItems, как это?==============================================================
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)
................
}