【发布时间】:2014-09-11 07:15:54
【问题描述】:
如何指定自定义UIActivity 支持主题?
UIActivityItemSource 协议的文档提到,如果您希望来源提供主题,您可以实现可选的 activityViewController:subjectForActivityType: 选择器:
发布项目时,服务可能会提供单独的主题字段和数据字段,例如电子邮件。如果您希望为支持主题字段的服务提供主题字段,请实施此方法。
但是,据我所知,在任何地方都没有记录我如何实际指定我的自定义 UIActivity 支持主题。这是怎么做到的?
编辑:让我的问题更清楚
假设我有一个自定义活动项源,例如实现UIActivityItemSource 协议的DocumentActivityItemSource,并且我有一个自定义UIActivity,我们可以将其称为SendWithFooMessageActivity。
然后我启动一个 UIActivtyViewController:
NSArray *activityItems = @[[[DocumentActivityItemSource alloc] initWithDocument: document]];
NSArray *applicationActivities = @[[[SendWithFooMessageActivity alloc] init]];
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:activityItems
applicationActivities:applicationActivities];
[parentViewController presentViewController:activityViewController
animated:YES
completion:nil];
现在,在弹出窗口中,我选择SendWithFooMessageActivity。然后活动控制器将在DocumentActivityItemSource 实例上调用activityViewController:itemForActivityType: 以获取一个项目,然后通过调用该对象prepareWithActivityItems: 方法将其转发到SendWithFooMessageActivity。
活动项通常是图像、字符串或 url。在这种情况下,假设DocumentActivityItemSource 返回一个字符串,其中包含有关文档的现有简介。然后SendWithFooMessageActivity 可以将此文本用作其 foo 邮件消息的正文。
但是,Foo 消息还要求主题有效。有趣的是,UIActivityItemSource 协议还包含可选的activityViewController:subjectForActivityType:,事实上它被记录为提供支持的服务的主题。
对于 Apple 提供的电子邮件活动,这确实发生了 - 在 DocumentActivityItemSource 上调用 activityViewController:subjectForActivityType:,结果在电子邮件中用作主题。
但是,似乎没有一种方法可以指定我的自定义 SendWithFooMessageActivity 也想从活动项中获取主题?文档提到“支持 [a subject] 的服务”会发生这种情况 - 那么我如何指定我的服务确实支持一个。
此外,activityViewController:thumbnailImageForActivityType:suggestedSize: 也是如此,它应该为“支持的服务”提供缩略图。这适用于默认的 ShareOnTwitter 和 ShareOnFacebook 活动,但似乎没有办法让自定义活动支持它。这可能吗?
到目前为止,我已经使用了@chriszumberge 在下面提供的解决方法,即将activityViewController 短路,并使用itemsource 所需的信息直接初始化自定义活动:
[SendWithFooMessageActivity alloc] initWithSubject: document.title];
但这似乎不是应该使用整个 UIActivityViewController 设置的方式。
【问题讨论】:
标签: ios objective-c uiactivityviewcontroller