Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift UIActivityViewController仅为FB、Twitter和邮件共享图像,而不共享消息_Swift_Facebook_Uiactivityviewcontroller - Fatal编程技术网

Swift UIActivityViewController仅为FB、Twitter和邮件共享图像,而不共享消息

Swift UIActivityViewController仅为FB、Twitter和邮件共享图像,而不共享消息,swift,facebook,uiactivityviewcontroller,Swift,Facebook,Uiactivityviewcontroller,因此,我使用以下代码获取所有UIActivityType的文本 @objc func activityViewControllerPlaceholderItem(activityViewController: UIActivityViewController) -> AnyObject { return "" } @objc func activityViewController(activityViewController: UIActi

因此,我使用以下代码获取所有UIActivityType的文本

        @objc func activityViewControllerPlaceholderItem(activityViewController: UIActivityViewController) -> AnyObject {
        return ""
    }

    @objc func activityViewController(activityViewController: UIActivityViewController, itemForActivityType activityType: String) -> AnyObject? {
        if activityType == UIActivityTypeMessage {
            return "String for message"
        } else if activityType == UIActivityTypeMail {
            return "String for mail"
        } else if activityType == UIActivityTypePostToTwitter {
            return "String for twitter"
        } else if activityType == UIActivityTypePostToFacebook {
            return "String for facebook"
        }
        return nil
    }

    func activityViewController(activityViewController: UIActivityViewController, subjectForActivityType activityType: String?) -> String {
        if activityType == UIActivityTypeMessage {
            return "Subject for message"
        } else if activityType == UIActivityTypeMail {
            return "Subject for mail"
        } else if activityType == UIActivityTypePostToTwitter {
            return "Subject for twitter"
        } else if activityType == UIActivityTypePostToFacebook {
            return "Subject for facebook"
        }
        return ""
    }   
}
这就是有趣的部分发生的地方。我将URL中的图像添加到objectsToShare数组中。如果我希望为所有人显示图像,这将很好,但我的问题是我不希望为
UIActivityTypeMessage
显示图像。其中应该只包含文本,而不包含图像。我该怎么做

    // Load image to share
let articleURL = URLBuilder.sharedInstance.addOnlyHttps((promo?.imageUrl)!)
KingfisherManager.sharedManager.cache.retrieveImageForKey(articleURL, options: nil) { (image, _) -> () in
    if image != nil {
        objectsToShare.append(image!)
        self.openShareViewController(objectsToShare, sender: sender )
    } else {
        KingfisherManager.sharedManager.downloader.downloadImageWithURL(NSURL(string: articleURL)!, progressBlock: nil, completionHandler: { (image, error, imageURL, originalData) in
            if image != nil {
                KingfisherManager.sharedManager.cache.storeImage(image!, forKey: articleURL)
                objectsToShare.append(image!)
                self.openShareViewController(objectsToShare, sender: sender)
            }
        })

    }
}
  • 要为不同的ActivityItem设置不同的内容,最好使用UIActivityItemSource。有关ActivityItemSource的更多信息,请查看此项
  • 您已经在遵循相同的方法,因此很容易找到问题的解决方案
  • 创建两个UIActivityItemSource类,如下所示

    SourceOne:

    class MyStringItemSourceOne: NSObject, UIActivityItemSource {
    @objc func activityViewControllerPlaceholderItem(activityViewController: UIActivityViewController) -> AnyObject {
       return ""
    }
    
    @objc func activityViewController(activityViewController: UIActivityViewController, itemForActivityType activityType: String) -> AnyObject? {
    
       if activityType == UIActivityTypeMessage {
         return "String for message"
       } else if activityType == UIActivityTypeMail {
        return "String for mail"
       } else if activityType == UIActivityTypePostToTwitter {
        return "String for twitter"
       } else if activityType == UIActivityTypePostToFacebook {
        return "String for facebook"
       }
       return nil
       }
    }
    
  • 通过添加上述代码,我们设置了要共享的字符串内容

  • 我们的要求是为所有activityType设置映像,除了UIActivityTypeMessage,以便我们将创建另一个UIActivityItemSource

    SourceTwo

     class MyStringItemSourceTwo: NSObject, UIActivityItemSource {
     @objc func activityViewControllerPlaceholderItem(activityViewController: UIActivityViewController) -> AnyObject {
        return ""
      } 
    
     @objc func activityViewController(activityViewController:  UIActivityViewController, itemForActivityType activityType: String) -> AnyObject? {
    
        let Image: UIImage = UIImage(data: NSData(contentsOfURL: NSURL(string: "http://i.telegraph.co.uk/multimedia/archive/03589/Wellcome_Image_Awa_3589699k.jpg")!)!)!
        if activityType == UIActivityTypeMessage {
           return nil
        } else if activityType == UIActivityTypeMail {
        //return "String for mail"
           return Image
        } else if activityType == UIActivityTypePostToTwitter {
           return Image
        } else if activityType == UIActivityTypePostToFacebook {
           return Image
        }
        return nil
       }
    
    }
    
  • 接下来,将上述两个源添加到UIActivityViewController中,作为activityitems,如下所示

    @IBAction func Test(sender: AnyObject) {
    
       let activityVC = UIActivityViewController(activityItems: [MyStringItemSourceOne(),MyStringItemSourceTwo()] as [AnyObject], applicationActivities: nil)
       //NOTE: 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共享图像和文本。例外UIActivityTypeMessage应该只有文本而不是图像。对吗?@Gokulvivid在好的位置上是正确的先生:D这确实是我需要的检查我的答案它可能完全满足您的需要。@Gokulvivid您的答案正是我需要的,谢谢!很有魅力