Как установить тему письма в UIActivityViewController?

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

Исправлена ​​ли эта проблема в последних версиях iOS? Любые другие "рабочие решения"?

4 ответа

Решение

Кажется, что решение Emreoktem - отправка setValue:forKey: к UIActivityViewController- не имеет документов.

В iOS 7 и более поздних версиях вы можете activityViewController:subjectForActivityType: метод в объекте, соответствующем UIActivityItemSource протокол, чтобы сделать это способом, который задокументирован.

Проверьте ниже код для электронной почты для настройки вашей темы электронной почты:

UIActivityViewController* avc = [[UIActivityViewController alloc] initWithActivityItems:@[@"Your String to share"]
                                  applicationActivities:nil];
[avc setValue:@"Your email Subject" forKey:@"subject"];

avc.completionHandler = ^(NSString *activityType, BOOL completed) {
    // ...
};

Здесь линия

[avc setValue:@"Ваш адрес электронной почты" forKey:@"subject"];

Делает тему "Тема вашей электронной почты", если пользователь выбирает опцию электронной почты в UIActivityViewController.

Я надеюсь, что это помогает...

Вот конкретное решение для Swift 3.0+, основанное на принятом ответе. Обратите внимание, что, как и принятый ответ, известно, что он работает только в приложении Почта iOS и не обязательно в других приложениях.

Реализация:

class MessageWithSubject: NSObject, UIActivityItemSource {

    let subject:String
    let message:String

    init(subject: String, message: String) {
        self.subject = subject
        self.message = message

        super.init()
    }

    func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
        return message
    }

    func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivityType) -> Any? {
        return message
    }

    func activityViewController(_ activityViewController: UIActivityViewController,
                                subjectForActivityType activityType: UIActivityType?) -> String {
        return subject
    }
}

Использование:

Вот пример использования. Обратите внимание, что он хорошо подходит для использования в качестве первого элемента в массиве activityItems и включает в себя любые дополнительные элементы, которые необходимо выполнить:

let message = MessageWithSubject(subject: "Here is the subject", message: "An introductory message")
let itemsToShare:[Any] = [ message, image, url, etc ]

let controller = UIActivityViewController(activityItems: itemsToShare, applicationActivities: nil)

Для Swift 2.0+ и ios 8.0+

let title = "Title of the post"
let content = "Content of the post"
let objectsToShare = [title, content]

let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)      
activityVC.setValue(title, forKey: "Subject")
self.presentViewController(activityVC, animated: true, completion: nil)
Другие вопросы по тегам