2016-05-26 6 views
1

Ich versuche, ein Bild mit Text durch UIActivityViewController zu teilen. Wenn ich das tue:Geben Sie ein Miniaturbild mit UIActivityViewController

 let activityVC = UIActivityViewController(activityItems: [text, image], applicationActivities: nil) 
     self.presentViewController(activityVC, animated: true, completion: nil) 

Alles funktioniert gut. Das Problem ist, dass ich das Bild nur mit bestimmten Aktivitätstypen teilen möchte. Wenn ein Benutzer Facebook nutzt, möchte ich kein Bild haben, für alles andere, was ich tue. Mein Problem ist, diese dumme Methode nie aufgerufen:

optional func activityViewController(_ activityViewController: UIActivityViewController, 
     thumbnailImageForActivityType activityType: String?, 
         suggestedSize size: CGSize) -> UIImage? 

Welche sollte becuase es in UIActivityItemSource Protokoll definiert ist. Gibt es dafür irgendwelche Arbeiten?


Also ich glaube, hier einige Fortschritte gemacht haben. Wenn Sie mehrere Werte von self übergeben, wenn Sie UIActivityViewController instanziieren, können Sie mehrere Werte in der Delegatenmethode itemForActivityType zurückgeben. Also, wenn ich dies tun:

let activityVC = UIActivityViewController(activityItems: [self, self], applicationActivities: nil) 

kann ich verschiedene Werte wie folgt zurück:

func activityViewController(activityViewController: UIActivityViewController, itemForActivityType activityType: String) -> AnyObject? { 
    if activityType == UIActivityTypePostToFacebook { 
     return ["hello", "world"] 
    } 
    else { 
     return ["goodnight", "moon"] 
    } 
} 

Es scheint jedoch, dass Sie nur zwei Werte des gleichen Typs zurückgeben kann.

Meine neue Frage ist jetzt, wie würde ich sowohl ein Bild und Text zurückgeben? Die Jagd geht weiter ...

Antwort

2

Um zwei unterschiedlichen Satz von Inhalt zu teilen Sie zwei erstellen haben unterschiedliche ItemSource

  1. wir verschiedene Textinhalte für unterschiedliche Aktivität type.Add die MyStringItemSource Klasse festlegen zu Ihrem 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" 
        } 
        } 
    } 
    
  2. Unsere Anforderung besteht darin, ein Image zu allen Aktivitätstypen außer FB hinzuzufügen. Dazu fügen Sie die MyImageItemSource-Klasse in Ihrem VC hinzu.

    SourceTwo:

    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 
        } 
    
    } 
    
  3. Jetzt sind wir bereit UIActivityViewController zu setzen, hier gehen wir

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

TWITTER Gemeinsamer Dialog: Enthält Bild und bestimmten Text

enter image description here

FB Anteil Dialog: nur die gegebenen Text

enter image description here

Enthält
Verwandte Themen