使用iOS6 UIActivityViewController附加对象

时间:2012-09-28 19:14:45

标签: ios6 sharing

我正在迁移使用UIActivityViewController在iOS6中进行共享,但我无法弄清楚如何在通过电子邮件共享时创建要包含的电子邮件附件对象。

iOS5中的相应代码是:

MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
[picker addAttachmentData:data mimeType:@"application/XXX" fileName:fileName];

3 个答案:

答案 0 :(得分: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];

答案 1 :(得分:2)

对于想知道为什么他们的文件没有使用UIActivityViewController与DropBox和其他通用文件处理应用程序等应用程序共享的人,你真正想要的是一个UIDocumentInteractionController。

使用类似这样的东西:

class ViewController {
    var openInController:UIDocumentInteractionController!

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

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

答案 2 :(得分:0)

据我所知,你不能用UIActivityViewController做到这一点 - 我甚至无法让它为消息体提供HTML内容 - 所以你最好还是使用SLComposeViewController。