UIActivityViewController - 有没有办法知道选择了哪个活动?

Ada*_*dam 46 uiactivityviewcontroller

我希望能够跟踪用户是否通过Facebook,Twitter等共享,但似乎无法知道选择了哪种方法.在那儿?

小智 46

您可以在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];
Run Code Online (Sandbox Code Playgroud)

系统内置支持的内置活动类型.

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;
Run Code Online (Sandbox Code Playgroud)

为iOS 8编辑

请注意,这将在iOS 8中生成编译器警告,您需要使用该setCompletionWithItemsHandler方法而不是setCompletionHandler方法.

更换:

[activityVC setCompletionHandler:^(NSString *activityType, BOOL completed) {
Run Code Online (Sandbox Code Playgroud)

有:

[activityVC setCompletionWithItemsHandler:^(NSString *activityType, BOOL completed,  NSArray *returnedItems, NSError *activityError) {
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这很有帮助!如果我需要知道他们之后选择了什么,这是很好的,但我也需要事先知道.例如,如果有人点击推特按钮,我想显示与Facebook不同的消息 (2认同)

All*_*eld 26

在Swift 4中:

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

        if activity == .postToTwitter {
            print("twitter")
        }

        if activity == .mail {
            print("mail")
        }
    }
Run Code Online (Sandbox Code Playgroud)