UIActivityItemSource Protocole 设置复杂对象
Posted
技术标签:
【中文标题】UIActivityItemSource Protocole 设置复杂对象【英文标题】:UIActivityItemSource Protocole set complex object 【发布时间】:2012-10-23 11:21:52 【问题描述】:我正在使用 ios 6 新的信息共享方式:UIActivityViewController
。要根据媒体(facebook、twitter 或邮件)选择共享数据,我的视图控制器实现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
很好地使用了该字符串,但我找不到使用 Array
的方法!
根据 Apple 文档,这应该是可能的:
此方法返回活动对象要作用的实际数据对象 Apple documentation
有没有人用过这个UIActivityItemSource
协议和数组,或者有没有完整的教程可以做到这一点?
注意:我在控制台上也遇到了这个错误,它可能会有所帮助...
启动服务:注册未知应用标识符 com.apple.mobilemail 失败
启动服务:找不到应用标识符 com.apple.mobilemail
【问题讨论】:
你有没有发现控制台中关于 com.apple.mobilemail 的消息是什么? 控制台错误仅发生在模拟器中,其中邮件应用程序根本不存在。可以忽略。 @Tommecpe:你是怎么解决的? 【参考方案1】:符合UIactivityItemSource
的单个对象只能返回activityViewControllerPlaceholderItem:
的单条数据,不能返回NSArray
s。
您可以通过在初始initWithActivityItems:
的activityItems
部分中创建并传递两个UIActivityItemSource
s 来克服这个问题。每个源都可以传递一个占位符值,但可以在 itemForActivityType
上返回空白值,因此您实际上不必根据活动使用该特定类型的数据。
或者只是使用另一个答案中提到的那个很酷的扩展。
【讨论】:
我必须做到这一点,并在这里发布我的解决方案......也许它可以帮助某人:***.com/a/70866445/611879【参考方案2】:在花费大量时间试图弄清楚这一点之后,似乎不可能将NSArray
的项目传递给它。所以我扩展了UIActivityViewController
使其成为可能。
RDActivityViewController
【讨论】:
非常感谢。我会尽快测试它。 有人能详细说明一下吗?什么方法不允许使用 NSArray?我有同样的问题,无法理解答案。 Tnx。 这太棒了!谢谢!为了这个问题,我已经把头撞在墙上几个小时了。 RDActivityViewController 效果很好。 @rdougan 我在我的 swift 项目中遇到了集成问题:'-[RDActivityViewController copyWithZone:]: unrecognized selector sent to instance 0x133220d60'以上是关于UIActivityItemSource Protocole 设置复杂对象的主要内容,如果未能解决你的问题,请参考以下文章
UIActivityItemSource Protocole 设置复杂对象