【问题标题】:Not able to share Docx in form of NSDATA using UIActivityViewController无法使用 UIActivityViewController 以 NSDATA 的形式共享 Docx
【发布时间】:2016-12-01 07:55:22
【问题描述】:

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

UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:self.downloadData applicationActivities:self.applicationActivities];

【问题讨论】:

    标签: ios objective-c xcode uiwebview


    【解决方案1】:

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

    文件: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

    【讨论】:

    • 我正在尝试在 MS excel 中打开 xlsx 文件。我已经在 iOS 11 中实现了你的课程,但我仍然无法在 AcitvityViewController 中获得 excel 查看器。
    【解决方案2】:

    UIActivityViewController 支持的数据类型

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多