2012-10-09 1 views
10

Endlich durch Apple (ziemlich düster) Dokumentation über die neue UIActivityViewController Klasse und das UIActivityItemSource Protokoll, und ich versuche, verschiedene Datensätze zu verschiedenen Aktionen aus der Aktivitätsansicht aufgerufen senden. Um die Dinge zu vereinfachen, sehe ich zwei Dinge an.Anfangstext und Paperclipped-URL für Aktionen in UIActivityViewController & UIActivityItemSource?

  1. Eine Facebook-Posting-Aktion, die "Check this out!" und eine URL an den Post anhängen (mit dieser niedlichen kleinen Büroklammer).
  2. Eine Twitter-Posting-Aktion, die "Check this out, with #hashtag!" und die gleiche URL anhängen (mit derselben Büroklammer).

Hier ist der Code, den ich jetzt implementiert habe.

- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType { 
    if ([activityType isEqualToString:UIActivityTypePostToFacebook]) { 
     return @"Check this out!"; 
    } else if ([activityType isEqualToString:UIActivityTypePostToTwitter]) { 
     return @"Check this out, with #hashtag!"; 
    } 

    return @""; 
} 

- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController { 
    return @""; 
} 

Und dann, wenn ich diesen Aktivitätsansicht-Controller (es ist in der gleichen Klasse), das ist, was ich tue.

UIActivityViewController *activityView = [[UIActivityViewController alloc] initWithActivityItems:@[self] applicationActivities:nil]; 
[self presentViewController:activityView animated:YES completion:nil]; 

Mein Dilemma ist , wie man das NSURL Objekt befestigen. Es ist relativ einfach, die iOS 6 SL-Klasse Buchungsmodalitäten aufzurufen; Sie rufen einfach die einzelnen Methoden auf, um eine URL oder ein Bild anzuhängen. Wie würde ich das hier machen?

Ich werde beachten, dass anstelle NSString Objekte aus -activityViewController:itemForActivityType zurückzukehren, wenn ich nur NSURL Objekten zurückgeben, zeigen sie mit dieser Büroklammer, ohne Text in der Zeit nach oben. Wenn ich ein Array dieser beiden Elemente zurückgebe, wird nichts angezeigt.

Antwort

15

Offensichtlich war es so einfach: Übergabe eines Arrays an das erste Argument des Initaufrufs UIActivityViewController, wobei jedes Element im Array einen anderen Datentyp behandelt, der auf dem Bildschirm zum Zusammensetzen endet. self behandelt den Text, und das zweite Objekt (NSURL) hängt die URL an.

Wirklich wünschen, dass es mehr gab, aber hier ist es.

+3

Beachten Sie, dass eine einzelne UIActivityItemSource nur einen Platzhalter für ein einzelnes Datenelement zurückgeben kann (keine zurückgegebenen NSArrays für 'activityViewControllerPlaceHolderItem:'. Weitere Informationen finden Sie in der folgenden Frage: http://stackoverflow.com/questions/13029340/uiactivityitemsource- protocole-set-complex-object – Doug

+0

Danke für den Hinweis auf diese andere Frage.Ich habe den "UIActivityViewController" vorläufig verlassen (ich habe zu viele Stunden damit verschwendet, es zu tun, was ich will), da es so ist so unflexibel, aber diese Unterklasse, die in Ihrem Link erwähnt wird, scheint ein bestimmter Schritt in die richtige Richtung zu sein. " –

+0

Ich habe mit dem gleichen Problem gekämpft. Es scheint merkwürdig, dass sie keine Konstanten für mögliche Datentypen definiert haben diese. UIActivityViewController ist eine großartige Idee, aber die Implementierung ist ein bisschen verrückt jetzt. – poetmountain