Прикрепить объект с помощью iOS6 UIActivityViewController

Я перехожу на использование UIActivityViewController для совместного использования в iOS6, но не могу понять, как создавать объекты вложения электронной почты, которые будут включены при совместном использовании по электронной почте.

Соответствующий код в iOS5:

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

person Setomidor    schedule 28.09.2012    source источник


Ответы (3)


У вас очень ограниченный контроль над UIActivityViewController, но если вы присоединяете хорошо известные типы mime, я обнаружил, что вы можете заставить его работать правильно, указав соответствующее расширение файла в URL-адресе файла. Например, если ваше вложение представляет собой визитную карточку, используйте расширение «.vcf» в URL-адресе файла:

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];
person markiv    schedule 23.10.2012
comment
Это действительно сработало, спасибо, markiv :) Я объединил это с другим руководством о том, как создавать собственные файлы для приложения (например, файлы с использованием .myApp), и это также работает с файловым URL. - person Setomidor; 11.12.2012
comment
извините, что поднял этот старый вопрос, но разве [data writeToURL:filePath atomically:YES] не должно быть [data writeToURL:fileURL atomically:YES]? - person Gabriele Petronella; 05.04.2013
comment
@GabrielePetronella Да, или я считаю, что [данные writeToFile:filePath атомарно:YES] тоже будут работать. - person Steve Moser; 05.08.2015
comment
привет, как это сделать с сетевым файлом? - person famfamfam; 27.03.2021

Для тех, кто интересуется, почему их файлы не передаются с помощью UIActivityViewController в такие приложения, как DropBox и другие общие приложения для обработки файлов, вам действительно нужен UIDocumentInteractionController.

Используйте это примерно так:

class ViewController {
    var openInController:UIDocumentInteractionController!

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

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

Из того, что я могу сказать, вы не можете сделать это с UIActivityViewController - я даже не могу заставить его представлять HTML-контент для тела сообщения - поэтому вам может быть лучше использовать SLComposeViewController.

person Christopher King    schedule 30.09.2012
comment
Можно добавить html-контент, пометив строку, которую вы передаете в элементы активности, тегом ‹html›‹body›...‹/body›‹/html› — только тогда он будет интерпретирован как html. - person SMSidat; 06.11.2013
comment
@SMSidat ты уверен? это именно то, что я сделал, и это было буквально отображено (т.е. не интерпретировано как HTML) - person Christopher King; 07.11.2013
comment
Я почти уверен - я сделал это, и это работает. Я действительно не хочу захватывать этот поток вопросов и ответов, поэтому, если у вас уже есть такой, я буду рад помочь вам там, или вы можете создать новый с копией соответствующей части вашего кода, и я посмотрю, что я могу сделать - person SMSidat; 08.11.2013