使用 iOS6 UIActivityViewController 附加对象

Posted

技术标签:

【中文标题】使用 iOS6 UIActivityViewController 附加对象【英文标题】:Attach object using iOS6 UIActivityViewController 【发布时间】:2012-09-28 19:14:44 【问题描述】:

我正在迁移以在 ios6 中使用 UIActivityViewController 进行共享,但我不知道如何创建电子邮件附件对象以在通过电子邮件共享时包含在内。

iOS5中对应的代码是:

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

【问题讨论】:

【参考方案1】:

您对 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 一起工作。 很抱歉提出这个老问题,但 [data writeToURL:filePath atomically:YES] 不应该是 [data writeToURL:fileURL atomically:YES] 吗? @GabrielePetronella 是的,或者我相信 [data writeToFile:filePath atomically:YES] 也可以。【参考方案2】:

如果有人想知道为什么他们的文件没有使用 UIActivityViewController 共享到 DropBox 和其他通用文件处理应用程序等应用程序,您真正想要的是 UIDocumentInteractionController。

像这样使用它:

class ViewController 
    var openInController:UIDocumentInteractionController!

    init() 
        openInController = UIDocumentInteractionController(URL: docURL)
    

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

【讨论】:

【参考方案3】:

据我所知,您无法使用 UIActivityViewController 执行此操作——我什至无法让它呈现消息正文的 html 内容——因此使用 SLComposeViewController 可能会更好。

【讨论】:

可以通过使用 ... 标记您传递给活动项的字符串来添加 html 内容 - 只有这样它才会被解释为html. @SMSidat 你确定吗?这正是我所做的,它是按字面意思呈现的(即不解释为 HTML) 我很确定 - 我已经完成了它并且它有效。我真的不想劫持这个问答线程,所以如果你已经有一个,我很乐意在那里为你提供帮助,或者你可以用你的代码的相关部分的副本创建一个新的,我'看看我能做什么

以上是关于使用 iOS6 UIActivityViewController 附加对象的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 iOS6 启动仪器

使用 iOS6 UIActivityViewController 附加对象

iOS6 上的虚拟键盘错误(使用 FPC)

iOS6 使用 PlayAndRecord 音频会话类别时音量非常低

IOS6 使用自动布局的约束

使用 UIStatusBarLightContent 处理 iOS6 兼容应用程序崩溃