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

我想用一个长的NSString作为数据使用UIActivityViewController 。 如果我把一个> 140个字符的string,其中的推特表不显示string。 如果在将string交给控制器之前截断string,则所有的UIActivities都有截断的string。 我不希望Facebook或消息被截断。

有没有办法给不同的UIActivities不同的string?

谢谢!

(例如,Marco Arment的杂志应用程序通过在UIActivityPostToTwitter中使用截断的string跟随@TheMagazineApp以及其他UIActivities中的其他内容UIActivities 。)

我想这是你要找的

您应该能够为每种活动types提供不同的数据。

希望这有助于某人。 如果你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 

然后将具有活动项目的数组的实例传递给UIActivityViewController:

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