不同的数据在UIActivityViewController共享供应商(Different data

2019-06-21 07:15发布

我试图用一个UIActivityViewController有一个长NSString作为数据。 如果我把一个字符串> 140个字符,则鸣叫片在它不显示该字符串。 如果我把它给控制器之前截断字符串,所有的UIActivities有截断的字符串。 我不希望Facebook或消息被截断。

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

谢谢!

(如马科·阿门特的杂志应用程序由具有截断的字符串,然后在@TheMagazineApp做到这一点UIActivityPostToTwitter ,和其他其他的东西UIActivities 。)

Answer 1:

我认为这是你在找什么: 自定义UIActivityViewController图标和文字 。

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



Answer 2:

希望这可以帮助别人。 如果你继承它是非常简单的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];


Answer 3:

这可以通过使用可选轻松完成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/



Answer 4:

您可以创建符合一类UIActivityItemSource ,然后用活动项目数组UIActivityViewController通过它的实例:,如@慕声波建议。

如果你想知道在哪个平台是用户共享和返回任何特定的数据依赖于挖掘平台,覆盖public func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any?



文章来源: Different data for sharing providers in UIActivityViewController