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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UIActivityViewController中共享提供程序的不同数据相关的知识,希望对你有一定的参考价值。

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

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

谢谢!

(例如,Marco Arment的The Magazine应用程序通过在UIActivityPostToTwitter中使用截断的字符串跟随@TheMagazineApp以及其他UIActivities中的其他内容来完成此操作。)

答案

我想这就是你要找的:Custom UIActivityViewController icons and text

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

另一答案

希望这有助于某人。如果你继承qa​​zxswpoi,这是非常简单的:

UIActivityItemProvider

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

@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
另一答案

这可以通过使用MyActivityItemProvider *activityItem = [[MyActivityItemProvider alloc] initWithPlaceholderItem:@"Your data"]; NSArray *sharingItems = [NSArray arrayWithObjects: activityItem, _myUITextView.viewPrintFormatter, nil]; UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:sharingItems applicationActivities:nil]; 对象的可选activityType属性轻松完成。该属性返回UIActivityItemProvider,因此您可以执行以下操作:

UIActivityType

更多信息在我的博客文章中:class PhotoActivityItemProvider: UIActivityItemProvider { ... override var item: Any { guard let activityType = self.activityType else { return photoURL.absoluteString } if activityType == .mail || activityType == .message { return "The photo link is (photoURL.absoluteString)." } ... }

另一答案

您可以创建一个符合https://www.whitesmith.co/blog/control-what-youre-sharing/的类,然后将其实例与活动项数组一起传递给UIActivityViewController:,正如@ Mu-Sonic建议的那样。

如果您想知道用户在哪个平台上共享并返回依赖于分布式平台的任何特定数据,请覆盖UIActivityItemSource

以上是关于UIActivityViewController中共享提供程序的不同数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 UIActivityViewController 共享存储在相机胶卷中的 PHAsset

容器视图中的 UIActivityViewController

UIActivityViewController,iOS,斯威夫特

UIActivityViewController 背景颜色

为 UIActivityViewController 编写委托

如何在 UIActivityViewController 中禁用 pinterest 选项?