2013-01-04 10 views

答えて

39

あなたは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]; 

に活動タイプを使用することができます。 iOSの8

のために編集

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; 

これはiOSの8でコンパイラ警告が生成されますのでご注意ください、あなたの代わりにsetCompletionHandler方法setCompletionWithItemsHandlerメソッドを使用する必要があります。

置き換えます

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

を持つ:

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

ありがとうございましたこれは役に立ちます!後で何を選んだのか分かっていればいいですが、事前に知っておく必要があります。たとえば、誰かがTwitterのボタンを押すと、私はFacebookとは異なるメッセージを表示したいのです – Adam

+0

'UIActivityItemSource'プロトコルに準拠したカスタムデータオブジェクトを実装する必要があります。アクティビティタイプに固有のフォーマットでデータを表示することも、タイプを追跡することもできます。 [NSHipster](http://nshipster.com/uiactivityviewcontroller/)にはすべての詳細があります。 – hagi

+0

メールオプションのみ表示ですか??どのように複数のオプションを追加できますか? –

1

あなたはタッチされたアクティビティを識別し、ちょうどそのプロトコルを実装することで、活動してカスタムデータを返すために、このLIB https://github.com/rdougan/RDActivityViewControllerを使用することができます。このよう

- (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"]; 
    } 
} 

私はあなたを助けている願っています!スウィフト2では

+4

このプロトコルコールのため、ちょうど私のアプリが拒否されました。明らかにプライベートAPIです。このライブラリは使用しないでください。 –

17

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

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

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

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

    } 
2

迅速な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)