UIActivityItemSource协议的文档提到您可以实现可选的activityVIEwController:subjectForActivityType:selector,如果您希望源代码提供主题:
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支持主题.这是怎么做到的?
编辑:让我的问题更清晰
假设我有一个自定义活动项源,比如实现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];
现在,在d出窗口中我选择SenDWithFooMessageActivity.然后,活动控制器将在documentActivityItemSource实例上调用activityVIEwController:itemForActivityType:以获取一个项,然后通过调用该对象prepareWithActivityItems:方法将其转发到SenDWithFooMessageActivity.
通常,活动项目将是图像,字符串或URL.在这种情况下,假设documentActivityItemSource返回一个字符串,其中包含有关文档的现有模糊信息.然后,SenDWithFooMessageActivity可以将此文本用作其foo-mail消息的正文.
但是,Foo消息还要求主题有效.有趣的是,UIActivityItemSource协议还包含可选的activityVIEwController:subjectForActivityType:实际上是为了提供支持一个服务的主题.
对于Apple提供的电子邮件活动,这确实发生了 – 在documentActivityItemSource上调用activityVIEwController:subjectForActivityType:并且结果在电子邮件中用作主题.
但是,似乎没有办法指定我的自定义SenDWithFooMessageActivity还想从activityitem获取主题?文档提到这种情况发生在“支持[一个主题]的服务” – 那么我如何指定我的服务实际上支持一个.
此外,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协议定义了UIActivityVIEwController对象用于检索要处理的数据项的方法(直接来自Apple文档).
activityVIEwController:subjectForActivityType:方法是UIActivityItemSource协议的一部分.
默认情况下,您的自定义UIActivityItemProvIDer符合UIActivityItemSource协议.这就是您需要实现subjectForActivityType:方法的地方.
然后,您可以使用switch / case语句或一堆if语句来确定自定义UIActivity的activityTitle方法中定义的传入[activityType isEqualToString:@“Custom UIActivity Title”].如果是这样,那么返回主题字符串应该是什么.但这需要在您的自定义UIActivityItemProvIDer子类中.
总结以上是内存溢出为你收集整理的ios – 定制UIActivity的主题全部内容,希望文章能够帮你解决ios – 定制UIActivity的主题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)