2013-01-04 4 views
36

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

+4

Всегда приятно видеть вопрос, который я собирался спросить. – Morkrom

ответ

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]; 

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

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; 

Edited для прошивки 8

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

Заменить:

[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, чтобы определить, какая деятельность была затронута и возвращать пользовательские данные по активности только за счет реализации его протокола.

Like This:

- (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

Только что мое приложение отклонено из-за этого протокола. По-видимому, это частный API. Не используйте эту библиотеку. –

17

В 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

скор 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) 

 Смежные вопросы

  • Нет связанных вопросов^_^