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

Aja*_*wal 9 xcode objective-c uiwebview ios

UIWebView用来打开一个Docx文件,它以NSDATA的形式从另一个控制器传递到webview.我UIAcvitityController也在使用社交媒体分享内容.它适用于图像类型和PDF类型,但它不适用于DOCX和XLSX.我需要做什么特别的事情吗?

UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:self.downloadData applicationActivities:self.applicationActivities];
Run Code Online (Sandbox Code Playgroud)

oca*_*rol 3

You need use custom data for activityItems, and implement methods in protocol UIActivityItemSource. follow it:

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
Run Code Online (Sandbox Code Playgroud)

file: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
Run Code Online (Sandbox Code Playgroud)

And, share content on social media:

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];
Run Code Online (Sandbox Code Playgroud)

The above code has been tested , it does work for DOCX and XLSX.

The source demo is here: https://github.com/ocarol/UIActivityViewControllerDemo