我终于找到了一个比我面临同样问题的人。
UIActivityViewController customize text based on selected activity
我希望使用UIActivityViewController的活动自定义内容共享。好的答案如下:
“不要将文本字符串传递给initWithActivityItems调用,而是传入您自己的UIActivityItemProvider类的子类,当您实现itemForActivityType方法时,它将提供共享服务作为'activityType‘参数。 然后,您可以从此方法返回自定义内容。“
我懂技巧,但我不知道怎么做.
我是作为子类这样做的:
@interface SharingItems : UIActivityItemProvider
@implementation SharingItems
-(id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType
{
// Here depending on the activityType i want to share NSString or UIImage
}
@end但我现在不知道在我最初的viewController中该做什么:
-(void)actionSheet
{
if ([[UIActivityViewController class] respondsToSelector:@selector(alloc)])
{
__block NSString *imgName = [[NSString alloc] initWithFormat:@"%@", _sharingUrl];
NSArray *activityItems = [NSArray arrayWithObjects:imgName, nil];
UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
[self presentViewController:activityController animated:YES completion:nil];
__block NSString *chan = [[NSString alloc] initWithFormat:@"%@", _channel];
[activityController setCompletionHandler:^(NSString* activityType, BOOL completed)
{
if (completed)
{
}
}];
}
else
[self displayActionSheet];
}发布于 2013-04-02 03:03:41
下面是一个UIActivityItemProvider示例(没有测试,而是根据工作代码进行调整):
@implementation StringProvider
- (id)initWithPlaceholderString:(NSString*)placeholder facebookString:(NSString*)facebookString
{
self = [super initWithPlaceholderItem:placeholder];
if (self) {
_facebookString = facebookString;
}
return self;
}
- (id)item
{
if ([self.activityType isEqualToString:UIActivityTypePostToFacebook]) {
return _facebookString;
} else {
return self.placeholderItem;
}
}
@end然后,当您设置活动视图控制器时:
StringProvider *stringProvider = [[StringProvider alloc] initWithPlaceholderString:@"Default string" facebookString:@"Hello, Facebook."];
UIActivityViewController *shareController = [[UIActivityViewController alloc] initWithActivityItems:@[stringProvider] applicationActivities:nil];基本上,您创建的UIActivityItemProviders在调用-(Id)项方法时提供正确的数据,并在创建活动视图控制器时传入这些活动项提供程序。您需要使用占位符项进行初始化,以便操作系统知道最终项是什么类(很可能是NSString、NSURL、UIImage)。希望这能帮上忙!
https://stackoverflow.com/questions/13494611
复制相似问题