2013-11-26 8 views
17

Ich habe den folgenden Code ein URL durch AirDrop senden:Anpassen der Abwurf Alarm Beschreibung in IOS

NSString* selfUrlScheme = [[[[[[NSBundle mainBundle] 
           infoDictionary] 
           valueForKey:@"CFBundleURLTypes"] 
          objectAtIndex:0] 
          valueForKey:@"CFBundleURLSchemes"] 
          objectAtIndex:0]; 

NSURL* schemeURL = [NSURL URLWithString: 
        [NSString stringWithFormat: 
        @"addList:%@,%@", 
        self.list.uniqueID, 
        selfUrlScheme]]; 

NSArray *objectsToShare = @[schemeURL]; 
controller = [[UIActivityViewController alloc] 
       initWithActivityItems:objectsToShare 
       applicationActivities:nil]; 

// Exclude all activities except AirDrop 
    NSArray *excludedActivities = @[UIActivityTypePostToTwitter, 
            UIActivityTypePostToWeibo, 
            UIActivityTypeAssignToContact, 
            UIActivityTypeSaveToCameraRoll, 
            UIActivityTypeAddToReadingList, 
            UIActivityTypePostToFlickr, 
            UIActivityTypePostToVimeo, 
            UIActivityTypePostToTencentWeibo]; 
controller.excludedActivityTypes = excludedActivities; 
[self presentViewController:controller animated:YES completion:nil]; 

Der Empfänger erhält dann die folgende Meldung:

enter image description here

Ist es möglich, Ändern Sie den Text der URL gefunden nach "X möchte teilen" zu etwas benutzerfreundlicher wie "X möchte eine Liste mit Ihnen teilen"? Danke im Voraus!

EDIT

Ich habe das jetzt, aber es noch erzeugt das gleiche Ergebnis oben:

AirDropCustomURL *container = [[AirDropCustomURL alloc] initWithUrl:schemeURL]; 
NSString *message = @"a list"; 
controller = [[UIActivityViewController alloc] initWithActivityItems:@[message, container] applicationActivities:nil]; 

@interface AirDropCustomURL : NSObject <UIActivityItemSource> 

@property (strong, nonatomic) NSURL *url; 
@property (strong, nonatomic) UIImage *productImage; 
- (id)initWithUrl:(NSURL *)url; 

@implementation AirDropCustomURL 

- (id)initWithUrl:(NSURL *)url { 
    if (self = [super init]) { 
     _url = url; 
    } 
    return self; 
} 

#pragma mark - UIActivityItemSource 

- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController { 
    //Because the URL is already set it can be the placeholder. The API will use this to determine that an object of class type NSURL will be sent. 
    return self.url; 
} 

- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType { 
    //Return the URL being used. This URL has a custom scheme (see ReadMe.txt and Info.plist for more information about registering a custom URL scheme). 
    if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) { 
     return nil; 
    } else { 
     if ([activityType isEqualToString:UIActivityTypeAirDrop]) { 
      return self.url; 
     } 
    } 
    return nil; 
} 
+0

Ich schätze, du hast kein Glück für diesen ... sehe meine bearbeitete Antwort. –

Antwort

7

Sie erhalten eine Klasse implementieren müssen, um auf das UIActivityItemSource Protokoll entspricht. Es gibt ein sehr schönes Beispiel hier: https://developer.apple.com/LIBRARY/IOS/samplecode/sc2273/Introduction/Intro.html. Sehen Sie sich insbesondere den APLCustomURLContainer an. Nachdem Sie Ihre URL Container-Klasse implementieren können Sie es auf die Aktivität Elemente zusammen mit einem String hinzufügen

MyURLContainer *container = [[MyURLContainer alloc] initWithURL:yourURL]; 
NSString *message = @"Your message"; 
UIActivityViewController activityController = [[UIActivityViewController alloc] initWithActivityItems:@[message, container] applicationActivities:nil]; 

EDIT (die Ihre benutzerdefinierte Nachricht sein wird):

Ich habe nicht zwei Telefone versuche es zuerst, also habe ich nur für Facebook und Twitter getestet, wo es richtig funktioniert, aber für AirDrop kann ich jetzt bestätigen (nach einigen Tests), dass es immer den relativen String von NSURL verwendet und selbst wenn du diese Methode von NSURL überschreibst funktioniert nicht so für AirDrop (die anderen Aktivitäten wie FB sind OK) ist es nicht möglich, diese Nachricht mit dem aktuellen SDK zu ändern.

+0

Wo hast du das gefunden? Weil sie das in dem Beispielcode nicht tun, den Sie verknüpften. –

+0

Der Beispielcode, den ich gerade gepostet habe, stammt von developer.apple.com und ich mache genau das. MyURLContainer sollte eine Unterklasse von NSObject sein, die dem UIActivityItemSource-Protokoll entspricht, genau wie der APLCustomURLContainer aus dem Beispiel. Sie können auch die Dokumentation für UIActivityViewController überprüfen, in der der activityItems-Parameter für die init-Methode erläutert wird: https://developer.apple.com/library/IOS/documentation/UIKit/Reference/UIActivityViewController_Class/Reference/Reference.html#// apple_ref/occ/instm/UIActivityViewController/initWithActivityItems: applicationActivities :. –

+0

@IvanGenchev siehe mich bearbeiten –

1

Scheint mir wie es ist mit der description der URL. Ich würde versuchen, NSURL Unterklasse und überschreiben die description Methode, um etwas wie @"a list" zurückzugeben. Ich habe es nicht ausprobiert, aber scheint, wie es funktionieren könnte ...

EDIT: ich diese Frage gefunden, die das gleiche wie Sie sein aussieht und es hat eine akzeptierte Antwort: Airdrop: making a custom URL scheme be less ugly for recipient

+0

Ich habe versucht, die Beschreibung in einer NSURL-Klasse unterklassifiziert, aber kein Glück. – Skela

+0

Ok, dann denke ich, dass ich den Teil der Antwort besser entferne, weil es eindeutig falsch ist. Vielen Dank. –

2

Sie benötigen um dem Tutorial zu folgen HERE. Nach der Überschrift "Ein kurzer Blick auf UIActivityViewController" finde ich genau das, wonach Sie suchen.

UIActivityViewController *controller = [[UIActivityViewController alloc] initWithActivityItems:objectsToShare applicationActivities:nil]; 
[self presentViewController:controller animated:YES completion:nil]; 
0

Diese Frage wurde vor einer langen Zeit gestellt. Ich habe versucht @ Ivan Antwort sowie andere Antworten in der Post, aber sie funktionieren einfach nicht!

Was ich ursprünglich habe, ist das Bild auf der linken Seite. Ich teile benutzerdefinierte Daten über AirDrop und schaute auf den Titel, der von UIActivityController standardmäßig generiert wird "data-3A4F9D ...", orz. Was ich erreichen möchte, ist ein beschreibender Titel, damit er für den Empfänger besser lesbar ist (Bild rechts). Es scheint, dass es Ihrer Frage sehr ähnlich ist (obwohl ich NSData teile, während Sie NSURL teilen.

Hier ist, was ich tun, was ziemlich gut funktioniert: Umsetzung der folgenden UIActivityItemSource Protokoll in meinem UIActivityItemProvider.

- (NSString *)activityViewController:(UIActivityViewController *)activityViewController 
      subjectForActivityType:(NSString *)activityType 
{ 
     // This returning string is added to the email title 
     return NSLocalizedString(@"CustomTitle", nil); 
} 

Wenn Sie immer noch mit diesem Problem, fühlen sich frei, dies zu versuchen und lassen Sie mich wissen, wie es für Sie arbeitet.

Verwandte Themen