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


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

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

4 60

4 ответа:

похоже, что решение эмреоктема-отправка 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:@ "Your email Subject" forKey:@ "subject"];

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

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

для 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)

вот конкретное решение для 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)