如何使用UIActivityViewController发送PDF文件

Ian*_*ner 25 objective-c ios6 uiactivityviewcontroller swift

我正在尝试使用UIActivityViewController.发送PDF .到目前为止,使用相当基本的方法一切正常,但我遇到的一个问题是,当我选择send by mail选项时,PDF的文件名Attachment-1不是Calculation.PDF我给文件的名称.

我不太介意标题的变化,但是当将文件发送给使用Windows PC的人时,缺少.pdf扩展确实会导致问题,我想解决这个问题.

我看了一下: 使用UIActivityViewController控制UIImage的文件名

但是看不到一个等效的方法:

[mailComposer addAttachmentData: UIImagePNGRepresentation(viewImage) mimeType:@"" fileName:@"myImage.png"];
Run Code Online (Sandbox Code Playgroud)

这将适用于PDF文件.这是没有自定义无法修复的东西,还是这个问题的简单解决方案?

Mur*_*m K 58

试试这个

NSData *pdfData = [NSData dataWithContentsOfFile:pdfFilePath];
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[@"Test", pdfData] applicationActivities:nil];

[self presentViewController:activityViewController animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

并且

NSString *str = [[NSBundle mainBundle] pathForResource:@"AppDistributionGuide" ofType:@"pdf"];   
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[@"Test", [NSURL fileURLWithPath:str]] applicationActivities:nil]; 
Run Code Online (Sandbox Code Playgroud)

  • @ iTroyd23,我尝试了你的建议,但我无法设置附件的标题.那么,你能描述如何设置附件的标题(例如myPdf.pdf) (3认同)

小智 9

//在斯威夫特

    let url = NSURL.fileURLWithPath(fileName)

    let activityViewController = UIActivityViewController(activityItems: [url] , applicationActivities: nil)

    presentViewController(activityViewController,
        animated: true,
        completion: nil)
Run Code Online (Sandbox Code Playgroud)


gm_*_*gm_ 8

以上关于Swift的列表在Swift 3中已弃用

let url = NSURL.fileURL(withPath: fileName)

let activityViewController = UIActivityViewController(activityItems: [url] , applicationActivities: nil)

present(activityViewController,
    animated: true,
    completion: nil)
Run Code Online (Sandbox Code Playgroud)


V D*_*hit 8

Swift 4.0

这里我附加了代码.我只是添加了线程处理来呈现"activityViewController",因为这个viewcontroller在加载实际数据之前存在.

let url = NSURLfileURL(withPath:fileName)

let activityViewController = UIActivityViewController(activityItems: [url] , applicationActivities: nil)

DispatchQueue.main.async {

    self.present(activityViewController, animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)