ios – 无法使用UIActivityViewController以NSDATA的形式共享Docx

我正在使用UIWebView打开一个Docx文件,该文件是从另一个控制器传递到webview的NSDATA形式.我正在使用UIAcvitityController在社交媒体上分享内容.它适用于图像类型和PDF类型,但它不适用于DOCX和XLSX.我需要做些什么特别的事吗?
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:self.downloadData applicationActivities:self.applicationActivities];

解决方法

您需要为activityItems使用自定义数据,并在协议UIActivityItemSource中实现方法.跟着它:

file:ShareData.h

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface ShareData : NSObject<UIActivityItemSource>
@property (nonatomic,strong) NSData *data;
@property (nonatomic,strong) NSURL *url;
@end

文件:ShareData.m

#import "ShareData.h"

@implementation ShareData
-(id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController {
    return self.data;
}

-(id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(Nsstring *)activityType {
    if ([activityType isEqualToString:UIActivityTypeAirDrop]) {
        return self.data;
    }
    return self.url;
}

-(Nsstring*)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(Nsstring *)activityType {
    return @"share data";
}

-(Nsstring*)activityViewController:(UIActivityViewController *)activityViewController dataTypeIdentifierForActivityType:(Nsstring *)activityType {
    if ([activityType isEqualToString:UIActivityTypeAirDrop]) {
        return @"test";
    }
    return nil;
}
@end

并且,在社交媒体上分享内容

ShareData *share = [ShareData new];
share.data = downloadData; // one of your downloadData
share.url = downloadURL; // url for the downloadData
 UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[share] applicationActivities:nil];

上面的代码已经过测试,它适用于DOCX和XLSX.

源演示在这里https://github.com/ocarol/UIActivityViewControllerDemo

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...