2013-01-04 12 views

risposta

39

È possibile utilizzare i tipi di attività in setCompletionHandler

UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItems applicationActivities:nil]; 

[activityVC setCompletionHandler:^(NSString *activityType, BOOL completed) { 
    if([activityType isEqualToString: UIActivityTypeMail]){ 
     NSLog(@"Mail"); 
    } 
    if([activityType isEqualToString: UIActivityTypePostToFacebook]){ 
     NSLog(@"Facebook"); 
    } 

}]; 
[self presentViewController:activityVC animated:TRUE completion:nil]; 

tipi di attività integrato per cui il sistema è dotato di supporto per.

NSString *const UIActivityTypePostToFacebook; 

NSString *const UIActivityTypePostToTwitter; 

NSString *const UIActivityTypePostToWeibo; 

NSString *const UIActivityTypeMessage; 

NSString *const UIActivityTypeMail; 

NSString *const UIActivityTypePrint; 

NSString *const UIActivityTypeCopyToPasteboard; 

NSString *const UIActivityTypeAssignToContact; 

NSString *const UIActivityTypeSaveToCameraRoll; 

cura per iOS 8

prega di notare che questo genererà un messaggio di avviso del compilatore in iOS 8, è necessario utilizzare il metodo setCompletionWithItemsHandler anziché il metodo setCompletionHandler.

Sostituire:

[activityVC setCompletionHandler:^(NSString *activityType, BOOL completed) { 

con:

[activityVC setCompletionWithItemsHandler:^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError) { 
+1

Grazie questo è utile! Ciò è positivo se ho bisogno di sapere cosa hanno scelto in seguito, cosa che faccio, ma ho anche bisogno di sapere in anticipo. Ad esempio, se qualcuno preme il pulsante twitter, desidero visualizzare un messaggio diverso da quello che faccio con Facebook – Adam

+0

È necessario implementare gli oggetti dati personalizzati conformi al protocollo 'UIActivityItemSource'. È quindi possibile presentare i dati in un formato specifico per il tipo di attività (o semplicemente tracciare il tipo). [NSHipster] (http://nshipster.com/uiactivityviewcontroller/) ha tutti i dettagli. – hagi

+0

solo l'opzione mail è visualizzata ?? come si può aggiungere più opzioni? –

1

È possibile utilizzare questo lib https://github.com/rdougan/RDActivityViewController per identificare quali l'attività è stata toccata e restituire i dati personalizzati per attività semplicemente implementando il suo protocollo.

in questo modo:

- (NSArray *)activityViewController:(NSArray *)activityViewController itemsForActivityType:(NSString *)activityType 
{ 
    if ([activityType isEqualToString:UIActivityTypePostToTwitter]) { 
     return @[@"Twitter text"]; 
    } else if ([activityType isEqualToString:UIActivityTypeMessage]) { 
     return @[@"Message text"]; 
    } else if ([activityType isEqualToString:UIActivityTypeMail]) { 
     return @[@"Mail text"]; 
    } else if ([activityType isEqualToString:UIActivityTypePostToFacebook]) { 
     return @[@"Facebook text"]; 
    } else { 
     return @[@"Default text"]; 
    } 
} 

Spero che vi ho aiutato!

+4

Ho appena rifiutato l'app a causa di questa chiamata al protocollo. Apparentemente è un'API privata. Non usare questa libreria. –

17

In Swift 2:

activityViewController.completionWithItemsHandler = { activity, success, items, error in 

     if !success{ 
     print("cancelled") 
     return 
     } 

     if activity == UIActivityTypePostToTwitter { 
     print("twitter") 
     } 

     if activity == UIActivityTypeMail { 
     print("mail") 
     } 

    } 
2

rapida 3

let activityViewController:UIActivityViewController = UIActivityViewController(activityItems: [screenCapture], applicationActivities: nil) 
activityViewController.excludedActivityTypes = [UIActivityType.print, UIActivityType.postToWeibo, UIActivityType.copyToPasteboard, UIActivityType.addToReadingList, UIActivityType.postToVimeo] 

activityViewController.completionWithItemsHandler = { activity, success, items, error in 
    if !success{ 
     print("cancelled") 
     return 
    } 

    if activity == UIActivityType.postToFacebook { 
     print("facebook") 
    } 

    if activity == UIActivityType.mail { 
     print("mail") 
    } 

} 

self.present(activityViewController, animated: true, completion: nil) 
Problemi correlati