2016-05-24 16 views
1

すべてのUIActivityTypesのテキストを取得するには、次のコードを使用しています。UIActivityViewControllerはFB、Twitter、Mailのみの画像を共有しますが、メッセージは表示されません

 @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の画像を表示したくないということです。それにはテキストだけが含まれ、画像は含まれていないはずです。これどうやってするの?異なるActivityItemごとに異なる内容を設定するための

// 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) 
      } 
     }) 

    } 
} 
+0

私はいくつかの説明が必要です。あなたはUIActivityViewcontrollerを通してイメージとテキストを共有する必要があります。 **例外** UIActivityTypeMessageはimage.right以外のテキストしか持たないはずですか? – Gokul

+0

@Gokulvividは良い先生:Dは実際に私が必要なものです – SoundShock

+0

私の答えをチェックして、あなたの必要をいっぱいにするかもしれません。 – Gokul

答えて

3
  1. が最高だったのは、このDocumentationをチェックActivityItemSourceに詳細.FOR にUIActivityItemSourceを使用することです。
  2. あなたはすでに同じ方法で従っていますので、問題の解決方法は簡単です。

    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 
        } 
    } 
    
  3. コードの上に追加することで、我々は異なる設定活動ActivityTypeを応じてshared.Noteすべき文字列コンテンツを設定します。

    の下SourceOneのよう
  4. 2つのUIActivityItemSourceクラスを作成します。文字列値。

  5. 我々は次に上記の二つを追加し、別の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 
        } 
    
    } 
    
  6. を作成しようとしているようにするために私たちの要件は、すべてのActivityTypeをがUIActivityTypeMessageを期待するために画像を設定することですソースは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) 
        } 
    } 
    
  7. これですべてはあなたの要件に応じて正常に動作します。

関連する問題