Objective c UIActivityItemSource协议集复杂对象
我正在使用iOS 6新的信息共享方式:Objective c UIActivityItemSource协议集复杂对象,objective-c,ios6,uiactivityviewcontroller,Objective C,Ios6,Uiactivityviewcontroller,我正在使用iOS 6新的信息共享方式:UIActivityViewController。要根据媒体(facebook、twitter或邮件)选择共享数据,my view controller执行UIActivityItemSource协议,如下所示: - (IBAction)onShareButton:(UIButton *)sender { UIActivityViewController *activityViewController = [[UIActivityViewContr
UIActivityViewController
。要根据媒体(facebook、twitter或邮件)选择共享数据,my view controller执行UIActivityItemSource
协议,如下所示:
- (IBAction)onShareButton:(UIButton *)sender
{
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[self] applicationActivities:nil];
activityViewController.excludedActivityTypes = @[UIActivityTypeMessage, UIActivityTypeAssignToContact, UIActivityTypeCopyToPasteboard, UIActivityTypeMessage, UIActivityTypePostToWeibo, UIActivityTypePrint, UIActivityTypeSaveToCameraRoll];
[self presentViewController:activityViewController animated:YES completion:^{}];
}
#pragma mark - UIActivityItemSource Protocol
- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType {
if ([activityType isEqualToString:UIActivityTypePostToFacebook]) {
NSArray *items = @[@"message facebook", [NSURL URLWithString:@"http://www.myUrlFacebook.com"]];
return items;
} else if ([activityType isEqualToString:UIActivityTypePostToTwitter]) {
NSArray *items = @[@"message twitter", [NSURL URLWithString:@"http://www.myUrlTwitter.com"]];
return items;
} else if ([activityType isEqualToString:UIActivityTypeMail]) {
NSArray *items = @[@"message mail", [NSURL URLWithString:@"http://www.myUrlMail.com"]];
return items;
}
NSArray *items = @[@"Not a proper Activity", [NSURL URLWithString:@"http://www.myUrlMail.com"]];
return items;
}
- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController {
return @"PlaceHolder";
}
当我为activityViewController:itemForActivityType:
返回一个简单的NSString时,我的UIActivityViewController
很好地使用了该字符串,但我找不到使用数组的方法
根据苹果公司的文档,应该可以:
此方法返回活动对象要处理的实际数据对象
是否有人将此UIActivityItemSource
协议用于数组,或者是否有使用完整教程来实现此目的
注意:我在控制台上也遇到了这个错误,这可能会有帮助
启动服务:注册未知的应用标识符com.apple.mobilemail失败
启动服务:找不到应用标识符com.apple.mobilemail
在花了大量时间试图弄明白这一点后,似乎不可能向其传递NSArray
项。因此,我扩展了UIActivityViewController
,使之成为可能
符合UIactivityItemSource
的单个对象只能返回activityViewControllerPlaceholderItem:
,无NSArray
s的单个数据段
您可以通过在初始initWithActivityItems:
的activityItems
部分中创建并传递两个UIActivityItemSource
来克服这一问题。每个源都可以传递一个占位符值,但可以在itemForActivityType
上返回空白值,因此实际上不必根据活动使用特定类型的数据
或者只使用另一个答案中提到的很酷的扩展。非常感谢。我会尽快测试它。有人能详细说明一下吗?什么方法不允许NSArray?我也有同样的问题,无法理解答案。这太棒了!非常感谢。为了这个问题,我已经把头撞在墙上几个小时了。RDActivityViewController工作得很好。@rdougan我在我的swift项目中面临集成问题:'-[RDActivityViewController copyWithZone:]:发送到实例0x133220d60的无法识别的选择器'您是否发现了控制台中关于com.apple.mobilemail的消息?控制台错误只发生在模拟器中,邮件应用程序根本不存在的地方。它可以被忽略。@Tommepe:你是如何修复它的?