UIActivityViewController中共享提供程序的不同数据

Mer*_*nci 24 objective-c ios ios6 uiactivityviewcontroller

我试图UIActivityViewController用一个长NSString的数据作为数据.如果我输入一个> 140个字符的字符串,则其中的推文表格不会显示该字符串.如果我在将字符串提供给控制器之前将UIActivities其截断,则所有字符串都会被截断.我不希望Facebook或消息被截断.

有没有办法给不同的字符串UIActivities

谢谢!

(例如,Marco Arment的The Magazine应用程序通过截断字符串后跟@TheMagazineApp进行此操作UIActivityPostToTwitter,以及其他内容UIActivities.)

小智 40

我认为这正是您所需要的:自定义UIActivityViewController图标和文本.

您应该能够为每种活动类型提供不同的数据.

  • 如果你想自定义现有的提供者(FB,Twitter等) - > - (id)activityViewController:(UIActivityViewController*)activityViewController itemForActivityType:(NSString*)activityType - 你要编辑的函数 - 这是你决定哪个项目将发布 (3认同)

小智 10

希望这有助于某人.如果你是子类,这是非常简单的UIActivityItemProvider:

@interface MyActivityItemProvider : UIActivityItemProvider
@end

@implementation MyActivityItemProvider

- (id)item
{
    // Return nil, if you don't want this provider to apply 
    // to a particular activity type (say, if you provide 
    // print data as a separate item for UIActivityViewController).
    if ([self.activityType isEqualToString:UIActivityTypePrint]) 
        return nil;

    // The data you passed while initialising your provider 
    // is in placeholderItem now.
    if ([self.activityType isEqualToString:UIActivityTypeMail] ||
        [self.activityType isEqualToString:UIActivityTypeCopyToPasteboard])
    {
        return self.placeholderItem;
    }

    // Return something else for other activities. Obviously, 
    // you can as well reuse the data in placeholderItem here.
    return @"Something else";
}

@end
Run Code Online (Sandbox Code Playgroud)

然后将其实例与一系列活动项传递给UIActivityViewController:

MyActivityItemProvider *activityItem = 
    [[MyActivityItemProvider alloc] initWithPlaceholderItem:@"Your data"];
NSArray *sharingItems = [NSArray arrayWithObjects:
    activityItem, _myUITextView.viewPrintFormatter, nil];

UIActivityViewController *activityController = 
    [[UIActivityViewController alloc] 
        initWithActivityItems:sharingItems applicationActivities:nil];
Run Code Online (Sandbox Code Playgroud)