Подтвердить что ты не робот

UIActivityViewController - есть ли способ узнать, какая деятельность была выбрана?

Id нравится отслеживать, делится ли пользователь в facebook, twitter и т.д., но, похоже, нет способа узнать, какой метод был выбран. Здесь?

4b9b3361

Ответ 1

Вы можете использовать виды деятельности в 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];

Встроенные типы операций, для которых система имеет встроенную поддержку.

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

Обратите внимание, что это вызовет предупреждение компилятора в iOS 8, вам нужно использовать метод setCompletionWithItemsHandler вместо метода setCompletionHandler.

Заменить:

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

с:

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

Ответ 2

В Swift 2:

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

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

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

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

    }

Ответ 3

Вы можете использовать этот 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"];
    }
}

Надеюсь, я помог вам!

Ответ 4

swift 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)