- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
如何指定自定义 UIActivity
支持主题?
UIActivityItemSource 的文档协议(protocol)提到您可以实现可选的 activityViewController:subjectForActivityType:
选择器,如果您希望源代码提供主题:
When posting an item the service may provide for a separate subject field and data field, such as an email message. Implement this method if you wish to provide a subject field for services that support one.
但是,据我所知,在任何地方都没有记录我如何实际指定我的自定义 UIActivity 支持主题。这是怎么做到的?
编辑:让我的问题更清楚
假设我有一个自定义事件项目源,比如说 DocumentActivityItemSource
,它实现了 UIActivityItemSource
协议(protocol),我有一个自定义的 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
。然后,事件 Controller 将在 DocumentActivityItemSource
实例上调用 activityViewController:itemForActivityType:
以获取项目,然后通过调用将项目转发到 SendWithFooMessageActivity
该对象 prepareWithActivityItems:
方法。
通常,事件项是图像、字符串或 url。在这种情况下,假设 DocumentActivityItemSource
返回一个字符串,其中包含关于文档的现有简介。 SendWithFooMessageActivity
然后可以使用此文本作为其 foo-mail 消息的正文。
但是,Foo 消息还需要一个有效的主题。有趣的是,UIActivityItemSource
协议(protocol)还包含可选的 activityViewController:subjectForActivityType:
,它实际上被记录为提供一个支持服务的主题。
对于 Apple 提供的电子邮件事件,这确实会发生 - activityViewController:subjectForActivityType:
在 DocumentActivityItemSource
上调用,结果在电子邮件中用作主题。
然而,似乎没有一种方法可以指定我的自定义 SendWithFooMessageActivity
也想从事件项中获取主题?文档提到这种情况发生在“支持 [a subject] 的服务”——那么我如何指定我的服务确实支持一个。
此外,activityViewController:thumbnailImageForActivityType:suggestedSize:
也是如此,它应该为“支持一个服务”提供缩略图。这适用于默认的 ShareOnTwitter 和 ShareOnFacebook 事件,但似乎没有办法让自定义事件支持它。这可能吗?
到目前为止,我已经使用了@chriszumberge 在下面也提供的解决方法,即短路 activityViewController 并直接使用它需要的来自 itemsource 的信息初始化自定义事件:
[SendWithFooMessageActivity alloc] initWithSubject: document.title];
但这似乎不是整个 UIActivityViewController
设置应该使用的方式。
最佳答案
我会推荐:
UIActivityViewController *activityVC = [[UIActivityViewController alloc]
initWithActivityItems:@[@"Info you're emailing out."] applicationActivities:nil];
[activityVC setValue:@"Custom Email Subject Here" forKey:@"subject"];
但是,由于您正在使用自定义 UIActivity
并且似乎正在使用电子邮件,因此我假设您正在使用 MFMailComposeViewController
发送电子邮件。
在这种情况下,我会在您的自定义 UIActivityItemProvider
中为主题字符串创建一个属性,并在您初始化自定义 UIActivity
的任何方法中设置它并将其传递给UIActivityViewController
。在提供程序中,您可以创建一个字典并为您希望在
- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType
方法。
从那里,在您的自定义 UIActivity
中,您可以将您的主题作为字典中的属性存储在 - (UIViewController*) activityViewController
方法中,并在相同的方法中使用下面的代码初始化电子邮件并设置主题。
MFMailComposeViewController *mailCVC = [[MFMailComposeViewController alloc] init];
mailCVC.mailComposeDelegate = self;
[mailCVC setSubject:theSubject];
[mailCVC setMessageBody:theMessage isHTML:NO];
[mailCVC addAttachmentData:theData mimeType:@"text/csv" fileName:theFileName];
编辑
UIActivityItemProvder
协议(protocol)定义了 UIActivityViewController 对象用来检索要操作的数据项的方法(直接来自苹果文档)。activityViewController:subjectForActivityType:
方法是 UIActivityItemSource
协议(protocol)的一部分。
您的自定义 UIActivityItemProvider
默认符合 UIActivityItemSource
协议(protocol)。这就是您需要实现 subjectForActivityType:
方法的地方。
然后您可以使用 switch/case
语句或一堆 if
语句来确定传入的 [activityType isEqualToString:@"Custom UIActivity Title "]
在自定义 UIActivity 的 activityTitle
方法中定义。如果是这样,则返回主题字符串应该是什么。但这需要在您的自定义 UIActivityItemProvider
子类中。
关于ios - 自定义 UIActivity 的主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25781354/
我正在开发一个在detailViewController中显示一些数据的应用程序。我在导航栏中有一个 rightBarButton,它呈现一个 UIActivityViewController,其中填
我希望将 UIActivityController 与标准事件一起使用来共享 UIImage。但是,当用户选择“邮件”时,我想执行自己的逻辑:呈现一个表单以让用户选择几个选项,然后自己撰写电子邮件,以
嘿伙计们,在上一个问题的帮助下,我想我几乎已经完成了这个工作..下面的代码 -(void)viewDidLoad { [super viewDidLoad]; //... all yo
我正在尝试实现自定义 UIActivity,但它不会显示我的图像。这是我要显示的内容: 我制作了 10% 不透明度的“天线和波浪”,以便显示它们。 这是我得到的: 我该如何解决这个问题? “天线和波浪
有没有办法让 UIActivity 显示自定义图片?默认情况下,它创建了金属风格的图标。有什么方法可以禁用它吗? 其次,我可以使用 UIActivity 而不是 UIActionSheet 吗?何时应
亲爱的社区, 一个简单的问题,但还没有明确的答案。 我能否将我的按钮添加到标准 UIActivityController,以便当用户转到照片/笔记/Safari 时,他也可以将其与 twitter/f
我制作了一个服装 UIActivity 类。我喜欢在类里面发送带有附件的电子邮件,但我无法发送电子邮件,也无法展示类里面的任何 ViewController。我试图用这个来呈现 Mail ViewCo
UIActivityIndicatorView *activityView = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0,
我有一个 UIActivity 实现了 activityViewController 方法。一切正常,除非用户快速双击我的事件图标。这会导致重复调用该方法并崩溃: Terminating app du
所以,我写了一个程序那是一个 map 应用程序,允许用户查看那里的位置当他们打开应用程序并双击时,它允许他们放下图钉隐藏的底部 View 显示出来,我想在该 View 中显示图像,因为我将 View
我将 UIActivityViewController 与一些自定义事件一起使用,以成功将图像发送到 DropBox 和 Instagram。有没有一种方法可以使用默认的 UIActivity 在 n
我已将 UIActivityIndicator 的 IBOutlet 添加到自定义单元格,但它并未显示在每个单元格上,仅在前 2-3 个单元格上显示,然后什么都没有。另一件事,当我滚动表格并返回前
如何指定自定义 UIActivity 支持主题? UIActivityItemSource 的文档协议(protocol)提到您可以实现可选的 activityViewController:subje
是否可以覆盖 UIActivityViewController 使用的内置 UIActivity 类型执行的事件? 例如,我希望 Facebook 事件使用我自己的自定义 View 而不是内置 Vie
我刚刚从 swift 2 升级到 swift 3,但在覆盖属性时遇到了一些问题。 在 swift 2 中你可以像这样设置事件类型 override func activityType() -> Str
我的应用支持 iOS 7+,我使用 UIActivity 图片大小:iPhone 60pt,iPad iOS 76pt, 当触摸更多按钮重新排序项目时,它无法在列表中显示图标。 代码如下: class
在我的应用程序中,我有一个带有标题、图像以及经度和纬度的地点对象。您应该能够在 Facebook 上分享这个地点。这是我到目前为止的代码: let textToShare = self.place.p
我尝试在 iOS 中使用事件指示器,但无法。我关注了 Stackoverflow 上的一个帖子并像这样使用它。这是我写的: -(void)viewDidLoad { [NSThread det
已经发布了各种各样的 UIActivities 来为 iOS 中的附加服务提供支持: https://github.com/shu223/UIActivityCollection 为什么还没有发布 F
我正在使用 UIActivityType 共享图像及其描述文本。如果我选择短信共享选项,我需要共享图像的 URL。我怎样才能做到这一点?目前我正在将图像和数据分享到 Facebook 和 Twitte
我是一名优秀的程序员,十分优秀!