Ios 使用UIActivityViewController提供缩略图图像

Ios 使用UIActivityViewController提供缩略图图像,ios,swift,uiactivityviewcontroller,Ios,Swift,Uiactivityviewcontroller,我正试图通过UIActivityViewController与文本共享图像。如果我这样做: let activityVC = UIActivityViewController(activityItems: [text, image], applicationActivities: nil) self.presentViewController(activityVC, animated: true, completion: nil) let activityVC

我正试图通过
UIActivityViewController
与文本共享图像。如果我这样做:

        let activityVC = UIActivityViewController(activityItems: [text, image], applicationActivities: nil)
        self.presentViewController(activityVC, animated: true, completion: nil)
let activityVC = UIActivityViewController(activityItems: [self, self], applicationActivities: nil)
一切正常。问题是,我只想与某些活动类型共享映像。i、 当一个用户分享到Facebook时,我不想拥有一张图片,尽管我做了其他的事情。我的问题是这个愚蠢的方法从未被调用:

optional func activityViewController(_ activityViewController: UIActivityViewController,
       thumbnailImageForActivityType activityType: String?,
                       suggestedSize size: CGSize) -> UIImage?
这应该是因为它是在
UIActivityItemSource
协议中定义的。这有什么办法吗


因此,我相信在这方面已经取得了一些进展。如果在实例化
UIActivityViewController
时传递了
self
的多个值,则可以在
itemForActivityType
委托方法中返回多个值。因此,如果我这样做:

        let activityVC = UIActivityViewController(activityItems: [text, image], applicationActivities: nil)
        self.presentViewController(activityVC, animated: true, completion: nil)
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"]
    }
}
但是,似乎只能返回两个相同类型的值


现在我的新问题是,如何同时返回图像和文本??搜寻继续…

为了共享两组不同的内容,您必须创建两个不同的itemsource

  • 我们可以为不同的活动类型设置不同的文本内容。将MyStringItemSource类添加到您的viewcontroller中

    SourceOne:

    class MyStringItemSource: NSObject, UIActivityItemSource {
    
    @objc func activityViewControllerPlaceholderItem(activityViewController: UIActivityViewController) -> AnyObject {
        return ""
    }
    
    @objc func activityViewController(activityViewController: UIActivityViewController, itemForActivityType activityType: String) -> AnyObject? {
        //You can pass different text for for diffrent activity type
        if activityType == UIActivityTypePostToFacebook {
            return "String for facebook"
        }else{
            return "String for Other"
        }
      }
    }
    
    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类

    来源二:

    class MyStringItemSource: NSObject, UIActivityItemSource {
    
    @objc func activityViewControllerPlaceholderItem(activityViewController: UIActivityViewController) -> AnyObject {
        return ""
    }
    
    @objc func activityViewController(activityViewController: UIActivityViewController, itemForActivityType activityType: String) -> AnyObject? {
        //You can pass different text for for diffrent activity type
        if activityType == UIActivityTypePostToFacebook {
            return "String for facebook"
        }else{
            return "String for Other"
        }
      }
    }
    
    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
      }   
    
    }
    
  • 现在我们已经准备好设置UIActivityViewController,开始吧

    @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)
    }
    }
    
  • 推特共享对话: 包含图像和给定文本

    FB共享对话: 仅包含给定的文本