我一直在尝试使用新的UIActivityViewController替换所有的UIActionSheets进行共享,但是我遇到了一个问题.
我有5个活动,Message,Email,Copy,Twitter和Facebook.我已经弄清楚如何让他们显示不同的文字,通过这个定制的UIActivityProvider子类:
- (id) activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType { if ( [activityType isEqualToString:UIActivityTypePostToTwitter] ) return twitter; if ( [activityType isEqualToString:UIActivityTypePostToFacebook] ) return facebook; if ( [activityType isEqualToString:UIActivityTypeMessage] ) return urlScheme; if ( [activityType isEqualToString:UIActivityTypeMail] ) return urlScheme; if ( [activityType isEqualToString:UIActivityTypeCopyToPasteboard]) return urlScheme; return nil; }
这在我看来控制器:
ActivityProvider *aProvider = [[ActivityProvider alloc] init]; aProvider.facebook = facebook; aProvider.twitter = twitter; aProvider.urlScheme = URL; NSArray *Items = @[aProvider,sharedURL]; UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:Items applicationActivities:Nil]; activityVC.excludedActivityTypes = @[UIActivityTypePrint,UIActivityTypeAssignToContact,UIActivityTypeSaveToCameraRoll,UIActivityTypePostToWeibo]; [self presentViewController:activityVC animated:TRUE completion:nil];
但是,我只想在Facebook和Twitter分享表中显示URL(sharedURL),而不是邮件,电子邮件或副本.任何方式来完成这个?
解决方法
您可以选择要发送给每种类型的活动.我创建了一个自定义活动提供者,并将其称为:
NSMutableArray *activityItems = [NSMutableArray array]; CustomActivityItemProvider *activityItemProvider = [[CustomActivityItemProvider alloc] initWithText:text urlText:urlString]; [activityItems addObject:activityItemProvider]; //you can have your own custom activities too: NSArray *applicationActivities = @[[CustomActivity new],[OtherCustomActivity new]]; UIActivityViewController *vc = [[UIActivityViewController alloc]initWithActivityItems:activityItems applicationActivities:applicationActivities];
自定义提供程序是UIActivityItemProvider的子类
@interface CustomActivityItemProvider : UIActivityItemProvider - (id)initWithText:(NSString *)text urlText:(NSString *)url; @end
我的自定义提供程序类的内容看起来像这样:
- (id)initWithText:(NSString *)text urlText:(NSString *)url{ if ((self = [super initWithPlaceholderItem:text])) { self.text = text ?: @""; self.url = url ?: @""; } return self; } - (id)item { NSString *activityType = self.activityType; if ([self.placeholderItem isKindOfClass:[NSString class]]) { if ([self.activityType isEqualToString:UIActivityTypePostToFacebook] || [self.activityType isEqualToString:UIActivityTypeMail]) { return [NSString stringWithFormat:@"%@\n%@",self.text,self.url]; } else if ([activityType isEqualToString:UIActivityTypePostToTwitter]) { return [self findBestStringOfLength:kTwitterMessageLength hashTags:YES]; } else if ([activityType isEqualToString:UIActivityTypeMessage]) { return [self findBestStringOfLength:kSMSMessageLength hashTags:YES]; } else { return self.text; } } return self.placeholderItem; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。