ios – UIActivityViewController – 仅为某些活动附加URL

前端之家收集整理的这篇文章主要介绍了ios – UIActivityViewController – 仅为某些活动附加URL前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在尝试使用新的UIActivityViewController替换所有的UIActionSheets进行共享,但是我遇到了一个问题.

我有5个活动,Message,Email,Copy,Twitter和Facebook.我已经弄清楚如何让他们显示不同的文字,通过这个定制的UIActivityProvider子类:

  1. - (id) activityViewController:(UIActivityViewController *)activityViewController
  2. itemForActivityType:(NSString *)activityType
  3. {
  4. if ( [activityType isEqualToString:UIActivityTypePostToTwitter] )
  5. return twitter;
  6. if ( [activityType isEqualToString:UIActivityTypePostToFacebook] )
  7. return facebook;
  8. if ( [activityType isEqualToString:UIActivityTypeMessage] )
  9. return urlScheme;
  10. if ( [activityType isEqualToString:UIActivityTypeMail] )
  11. return urlScheme;
  12. if ( [activityType isEqualToString:UIActivityTypeCopyToPasteboard])
  13. return urlScheme;
  14. return nil;
  15. }

这在我看来控制器:

  1. ActivityProvider *aProvider = [[ActivityProvider alloc] init];
  2. aProvider.facebook = facebook;
  3. aProvider.twitter = twitter;
  4. aProvider.urlScheme = URL;
  5.  
  6. NSArray *Items = @[aProvider,sharedURL];
  7.  
  8. UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:Items applicationActivities:Nil];
  9. activityVC.excludedActivityTypes = @[UIActivityTypePrint,UIActivityTypeAssignToContact,UIActivityTypeSaveToCameraRoll,UIActivityTypePostToWeibo];
  10.  
  11.  
  12. [self presentViewController:activityVC animated:TRUE completion:nil];

但是,我只想在Facebook和Twitter分享表中显示URL(sharedURL),而不是邮件,电子邮件或副本.任何方式来完成这个?

解决方法

您可以选择要发送给每种类型的活动.我创建了一个自定义活动提供者,并将其称为:
  1. NSMutableArray *activityItems = [NSMutableArray array];
  2.  
  3. CustomActivityItemProvider *activityItemProvider =
  4. [[CustomActivityItemProvider alloc] initWithText:text
  5. urlText:urlString];
  6.  
  7. [activityItems addObject:activityItemProvider];
  8.  
  9.  
  10. //you can have your own custom activities too:
  11. NSArray *applicationActivities = @[[CustomActivity new],[OtherCustomActivity new]];
  12. UIActivityViewController *vc = [[UIActivityViewController alloc]initWithActivityItems:activityItems
  13. applicationActivities:applicationActivities];

自定义提供程序是UIActivityItemProvider的子类

  1. @interface CustomActivityItemProvider : UIActivityItemProvider
  2.  
  3. - (id)initWithText:(NSString *)text urlText:(NSString *)url;
  4.  
  5. @end

我的自定义提供程序类的内容看起来像这样:

  1. - (id)initWithText:(NSString *)text urlText:(NSString *)url{
  2.  
  3. if ((self = [super initWithPlaceholderItem:text])) {
  4. self.text = text ?: @"";
  5. self.url = url ?: @"";
  6. }
  7. return self;
  8. }
  9.  
  10. - (id)item {
  11. NSString *activityType = self.activityType;
  12. if ([self.placeholderItem isKindOfClass:[NSString class]]) {
  13. if ([self.activityType isEqualToString:UIActivityTypePostToFacebook] ||
  14. [self.activityType isEqualToString:UIActivityTypeMail]) {
  15.  
  16. return [NSString stringWithFormat:@"%@\n%@",self.text,self.url];
  17.  
  18. } else if ([activityType isEqualToString:UIActivityTypePostToTwitter]) {
  19.  
  20. return [self findBestStringOfLength:kTwitterMessageLength hashTags:YES];
  21.  
  22. } else if ([activityType isEqualToString:UIActivityTypeMessage]) {
  23.  
  24. return [self findBestStringOfLength:kSMSMessageLength hashTags:YES];
  25.  
  26. } else {
  27. return self.text;
  28. }
  29. }
  30.  
  31. return self.placeholderItem;
  32. }

猜你在找的iOS相关文章