9 Stimmen

Herausfinden, auf welches Symbol in UIActivityViewController geklickt wurde

Bei Verwendung des "Social" Frameworks, wenn das modale UIActivityViewController angezeigt wird, das alle üblichen Social-Media-Symbole enthält, gibt es einen Weg, um genau herauszufinden, auf welches Symbol der Benutzer geklickt hat? Das heißt, wenn sie Twitter, Facebook, Mail, Message usw. gewählt haben?

Ich hatte erwartet, möglicherweise einige Delegatenmethoden für diese Klasse in den Docs zu sehen, aber ich sehe nichts.

Hat jemand Ideen?

17voto

rmaddy Punkte 307342

Die UIActivityViewController hat die Eigenschaft completionHandler. Implementieren Sie diesen Handler, um benachrichtigt zu werden.

UIActivityViewController *avc = ...;
avc.completionHandler = ^(NSString *activityType, BOOL completed) {
    if (completed) {
        NSLog(@"Die ausgewählte Aktivität war %@", activityType);
    }
};

7voto

Yannick Punkte 3210

Swift 3

Der Typenalias UIActivityViewControllerCompletionWithItemsHandler in Swift 3 wurde geändert zu

public typealias UIActivityViewControllerCompletionWithItemsHandler = (UIActivityType?, Bool, [Any]?, Error?) -> Swift.Void

Sie können den completionWithItemsHandler wie folgt verwenden.

activityViewController.completionWithItemsHandler = {(activityType: UIActivityType?, completed: Bool, returnedItems:[Any]?, error: Error?) in
    //Machen, was Sie wollen
}

4voto

Jonny Punkte 15299

completionHandler ist veraltet. Verwenden Sie completionWithItemsHandler.

activityController.completionWithItemsHandler = ^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError) {
    NSLog(@"completionWithItemsHandler, activityType: %@, completed: %d, returnedItems: %@, activityError: %@", activityType, completed, returnedItems, activityError);
};

4voto

kishorer747 Punkte 810

Basierend auf dieser SO-Antwort: https://stackoverflow.com/a/34581940/2177085

Dies beinhaltet auch die Überprüfung, ob der Benutzer über WhatsApp oder Gmail geteilt hat. Sie können activityType drucken, um andere Typen hinzuzufügen.

let activityViewController = UIActivityViewController(activityItems: [finalMsg as NSString], applicationActivities: nil)
self.presentViewController(activityViewController, animated: true, completion: nil)

activityViewController.completionWithItemsHandler = {(activityType, completed:Bool, returnedItems:[AnyObject]?, error: NSError?) in

// Return if cancelled
if (!completed) {
    print("Benutzer hat Abbrechen geklickt")
    return
}

if activityType == UIActivityTypeMail {
    print("Über Mail teilen")
}
else if activityType == UIActivityTypeMessage {
    print("Über iMessage teilen")
}
else if activityType == UIActivityTypePostToTwitter {
    print("Auf Twitter gepostet")
}
else if activityType == UIActivityTypePostToFacebook {
    print("Auf Facebook gepostet")
}
else if activityType == UIActivityTypeCopyToPasteboard {
    print("In die Zwischenablage kopiert")
}
else if activityType! == "net.whatsapp.WhatsApp.ShareExtension" {
    print("Aktivitätstyp ist WhatsApp")
}
else if activityType! == "com.google.Gmail.ShareExtension" {
    print("Aktivitätstyp ist Gmail")
}
else {
    // Nachdem der Wert für andere Apps aus der Konsole erhalten wurde, können Sie diesen Aktivitätstyp hinzufügen.
    print("Aktivitätstyp ist: \(activityType)")
}
}

2voto

Napster Punkte 120

Der untenstehende Code hat in meinem Fall funktioniert:

[activityController setCompletionHandler:^(NSString *act, BOOL done)
{

   NSLog(@"act type %@",act);
   NSString *ServiceMsg = nil;
   if ( [act isEqualToString:UIActivityTypeMail] )
     ServiceMsg = @"E-Mail gesendet";

   if ( [act isEqualToString:UIActivityTypePostToTwitter] )
     ServiceMsg = @"Auf Twitter gepostet, ok!";

   if ( [act isEqualToString:UIActivityTypePostToFacebook] ) 
     ServiceMsg = @"Auf Facebook gepostet, ok!";

   if ( done )
   {
      UIAlertView *Alert = [[UIAlertView alloc] initWithTitle:ServiceMsg message:@"" delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil];
      [Alert show];
      [Alert release];
   }
   else
   {
      // hat nicht geklappt. 
   }
}];

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X