使用iOS6 UIActivityViewController附加对象

8
我正在迁移到使用UIActivityViewController在iOS6中进行共享,但我无法弄清楚如何创建电子邮件附件对象,以便通过电子邮件分享。在iOS5中相应的代码如下:
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
[picker addAttachmentData:data mimeType:@"application/XXX" fileName:fileName];
3个回答

26

你对UIActivityViewController的控制非常有限,但如果你附加了众所周知的mime类型,我发现只要在文件URL中提供相关的文件扩展名,就可以使它正常工作。例如,如果你的附件是一个vCard,则在文件URL中使用“.vcf”扩展名:

NSString *docsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
// The file extension is important so that some mime magic happens!
NSString *filePath = [docsPath stringByAppendingPathComponent:@"vcard.vcf"];
NSURL *fileUrl     = [NSURL fileURLWithPath:filePath];

[data writeToURL:fileUrl atomically:YES]; // save the file

// Now pass the file URL in the activity items array
UIActivityViewController *avc = [[UIActivityViewController alloc] initWithActivityItems:
    @[@"Here's an attached vCard", fileUrl] applicationActivities:nil];
[vc presentModalViewController:avc animated:YES];

这真的起作用了,谢谢markiv :) 我将其与另一篇关于如何为应用程序创建自定义文件(例如使用.myApp的文件)的指南相结合,并且也成功地使用fileURL。 - Setomidor
1
抱歉提出这个旧问题,但是 [data writeToURL:filePath atomically:YES] 不应该是 [data writeToURL:fileURL atomically:YES] 吗? - Gabriele Petronella
@GabrielePetronella 是的,或者我相信 [data writeToFile:filePath atomically:YES] 也可以工作。 - Steve Moser

2

如果你想知道为什么使用 UIActivityViewController 无法将文件分享到像 DropBox 和其他常规文件处理应用程序中,那么你真正需要的是一个 UIDocumentInteractionController。

可以像这样使用它:

class ViewController {
    var openInController:UIDocumentInteractionController!

    init() {
        openInController = UIDocumentInteractionController(URL: docURL)
    }

    func shareDoc {
        openInController.presentOptionsMenuFromRect(CGRectZero, inView: self.view, animated: true)
    }
}

0
从我的了解来看,您无法使用UIActivityViewController实现此操作 - 我甚至无法使其呈现消息正文的HTML内容 - 因此,您最好使用SLComposeViewController。

可以通过在传递到活动项的字符串中标记<html><body>...</body></html>来添加HTML内容,只有这样才会将其解释为HTML。 - SMSidat
@SMSidat 你确定吗?那正是我所做的,但它被直接呈现(即未被解释为HTML)。 - Christopher King
我非常确定 - 我已经做过并且它有效。我不想在这个问答主题上占用太多空间,如果你已经有了相关的主题,我很乐意在那里帮助你,或者你可以创建一个新的主题,并复制你代码的相关部分,我会尽力帮忙。 - SMSidat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接