我正试图通过UIActivityViewController
与文字分享图片。如果我这样做:
let activityVC = UIActivityViewController(activityItems: [text, image], applicationActivities: nil)
self.presentViewController(activityVC, animated: true, completion: nil)
一切正常。问题是我只想与某些活动类型共享图像。即,当用户分享到Facebook时,我不想拥有图像,但我做的其他事情。我的问题是从未调用过这种愚蠢的方法:
optional func activityViewController(_ activityViewController: UIActivityViewController,
thumbnailImageForActivityType activityType: String?,
suggestedSize size: CGSize) -> UIImage?
哪个应该是UIActivityItemSource
协议中定义的。这有什么工作吗?
所以我相信在这里取得了一些进展。如果您在实例化self
时传递多个UIActivityViewController
值,则可以在itemForActivityType
委托方法中返回多个值。所以,如果我这样做:
let activityVC = UIActivityViewController(activityItems: [self, self], applicationActivities: nil)
我可以返回不同的值:
func activityViewController(activityViewController: UIActivityViewController, itemForActivityType activityType: String) -> AnyObject? {
if activityType == UIActivityTypePostToFacebook {
return ["hello", "world"]
}
else {
return ["goodnight", "moon"]
}
}
但是,您似乎只能返回两个相同类型的值。
我现在的新问题是,如何同时返回图像和文字?狩猎继续......
答案 0 :(得分:4)
为了分享两组不同的内容,您必须创建两个不同的itemource
我们可以为不同的活动类型设置不同的文本内容。将 MyStringItemSource类添加到您的viewcontroller
<强>的SourceOne:强>
class MyImageItemSource: NSObject, UIActivityItemSource {
@objc func activityViewControllerPlaceholderItem(activityViewController: UIActivityViewController) -> AnyObject {
return ""
}
@objc func activityViewController(activityViewController: UIActivityViewController, itemForActivityType activityType: String) -> AnyObject? {
//This one allows us to share image ecxept UIActivityTypePostToFacebook
if activityType == UIActivityTypePostToFacebook {
return nil
}
let Image: UIImage = UIImage(data: NSData(contentsOfURL: NSURL(string: "https://pbs.twimg.com/profile_images/604644048/sign051.gif")!)!)!
return Image
}
}
我们的要求是将图像添加到除FB 之外的所有活动类型,以便在VC中添加 MyImageItemSource类。
<强> SourceTwo:强>
@IBAction func Test(sender: AnyObject) {
let activityVC = UIActivityViewController(activityItems: [MyStringItemSource(),MyImageItemSource()] as [AnyObject], applicationActivities: nil)
//Instead of using rootviewcontroller go with your own way.
if let window = (UIApplication.sharedApplication().delegate as? AppDelegate)?.window
{
window.rootViewController?.presentViewController(activityVC, animated: true, completion: nil)
}
}
现在我们准备设置UIActivityViewController了,我们走了
{{1}}
TWITTER共享对话: 包含图像和给定文本
FB分享对话: 仅包含给定的文本