UIActivityViewController - 仅附加某些活动的URL [英] UIActivityViewController - Only attach a URL for certain activities
问题描述
我一直在尝试使用新的UIActivityViewController来替换我的所有UIActionSheets以进行共享,但是我遇到了一个问题。
I've been trying to use the new UIActivityViewController to replace all of my UIActionSheets for sharing, however I've run into an issue.
我有5项活动,消息,电子邮件,复制,推特和Facebook。我已经想出如何在自定义的UIActivityProvider子类中显示不同的文本:
I have 5 activities, Message, Email, Copy, Twitter, and Facebook. I've already figured out how to have those show different text, through this in a custom UIActivityProvider subclass:
- (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;
}
这在我的视图控制器中:
And this in my view controller:
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),而不是消息,电子邮件或副本。有什么方法可以实现这个目标吗?
However, I only want to show the URL (sharedURL) in the Facebook and Twitter share sheets, not the message, email or copy. Any way to accomplish this?
推荐答案
您可以选择发送给每种活动的内容。我创建了一个自定义活动提供程序并将其调用如下:
You can choose what to send to each type of activity. I created a custom activity provider and call it like this:
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的子类
The custom provider is a subclass of UIActivityItemProvider
@interface CustomActivityItemProvider : UIActivityItemProvider
- (id)initWithText:(NSString *)text urlText:(NSString *)url;
@end
我的自定义提供程序类的内容看起来像这样:
The guts of my custom provider class look something like this:
- (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;
}
这篇关于UIActivityViewController - 仅附加某些活动的URL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!