Swift 4 - UIActivityViewController 共享到 Outlook 主题和标题

Posted

技术标签:

【中文标题】Swift 4 - UIActivityViewController 共享到 Outlook 主题和标题【英文标题】:Swift 4 - UIActivityViewController share to Outlook Subject and Title 【发布时间】:2019-12-13 19:34:02 【问题描述】:

我正在使用UIActivityViewController 将文本共享到 Outlook,一切正常,除了两件事,一个 我无法设置主题 行和两个 我无法设置我正在分享的标题,我的文本是 html 表格,目前在我的实现中显示了它的第一部分(见屏幕截图),尽管我会喜欢显示预览标题。

有没有办法设置title和设置subject

这是我的代码:

let activityViewController = UIActivityViewController(activityItems : [htmlString], applicationActivities: nil)

activityViewController.popoverPresentationController?.barButtonItem = self.shareButton

self.present(activityViewController, animated: true, completion: nil)

我尝试过这样设置主题:

activityViewController.setValue("This is my subject", forKey: "subject")

但是没用

我做错了什么?

这是我说的标题的截图:

但是没用

【问题讨论】:

我安装了outlook,但它没有显示在列表中,你能帮忙吗? 【参考方案1】:

触发共享的任何视图控制器都应符合UIActivityItemSource 协议,以便设置:预览标题电子邮件主题以及的内容电子邮件

你可以试试这个例子,点击按钮触发分享:

class ViewController: UIViewController, UIActivityItemSource 

    override func viewDidLoad() 
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    

    @IBAction func sharePressed(_ sender: Any) 
        let item = [self, "Preview Title"] as [Any]

        let activityViewController = UIActivityViewController(activityItems: item, applicationActivities: nil)

        self.present(activityViewController, animated: true, completion: nil)
    

    func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any 
        return ""
    

    func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any? 
        return "<html><body><p style=\"background-color: red;\">Email body message with red background</p></body></html>"
    

    func activityViewController(_ activityViewController: UIActivityViewController, subjectForActivityType activityType: UIActivity.ActivityType?) -> String 
        return "Email Subject"
    


要有这个预期的输出:

不同 iOS 版本(iOS 11、iOS 12..)中的 Outlook 和 Gmail 等一些应用程序的行为不同:有些应用程序将正文的第一行设置为主题。只需确保针对您所针对的 ios 版本以及您想要针对共享功能正确运行的应用程序进行测试。您还可以在共享时设置多个itemForActivityType 以针对不同应用程序的目标逻辑。

【讨论】:

这解决了我的预览问题,但不是我的主题行问题 subjectForActivityType 没有被调用 这可能是与 Outlook App 共享时的具体问题?我实际上没有尝试过,只是尝试使用 iOS 电子邮件应用程序。也许你能看看你在这篇 *** 帖子的评论中提到的那个确切的问题:***.com/a/51451433/3564632 并且可能是同样的情况? 我认为你是对的......哦,好吧,人们可以输入他们自己的主题行。

以上是关于Swift 4 - UIActivityViewController 共享到 Outlook 主题和标题的主要内容,如果未能解决你的问题,请参考以下文章

swift 如何将Swift 3内置的cocoapod更新为Swift 4

swift Swift 4.2枚举示例

swift Swift 4.1枚举示例

swift Swift - CloudKit订阅 - 4

将 Swift 3 升级到 4,目标 c 中不再有 swift 扩展

使用 Swift 4.0.3 编译的模块不能被 Swift 4.2.1 编译器导入