UIActivityViewController在iOS 11上复制项目两次

时间:2017-10-02 13:37:57

标签: ios swift3 ios11 uiactivityviewcontroller

我正在使用UIActivityViewControlleriOS 11上分享网页浏览网址,在使用Copy时,请转到消息应用然后粘贴,然后粘贴两次。

出于好奇,我尝试使用Safari,Chrome,Firefox以及除邮件之外的其他应用程序。结果很有趣:

  • 来自Safari的应对程序始终适用于任何应用程序
  • Chrome或FireFox中的应答可在Notes应用中使用,但它会复制任何包含TextField(消息,WhatsApp,Slack,Signal,...)的应用中的复制文本

这是我的简单代码

func shareURL(title: String, url: URL) {
    var activityItems = [AnyObject]()
    activityItems.append(TitleActivityItemProvider(title: title))

    activityItems.append(url as AnyObject)

    let activityViewController = UIActivityViewController(activityItems: activityItems, applicationActivities: nil)
    self.present(activityViewController, animated: true, completion: nil)
}

这是TitleActivityItemProvider

class TitleActivityItemProvider: UIActivityItemProvider {
    static let activityTypesToIgnore = [UIActivityType.copyToPasteboard]

    init(title: String) {
        super.init(placeholderItem: title)
    }

    override var item : Any {
        if let activityType = activityType {
            if TitleActivityItemProvider.activityTypesToIgnore.contains(activityType) {
                return NSNull()
            }
        }
        return placeholderItem! as AnyObject
    }

    override func activityViewController(_ activityViewController: UIActivityViewController, subjectForActivityType activityType: UIActivityType?) -> String {
        return placeholderItem as! String
    }
}

这是iOS 11上的错误,还是我在考虑使用UIActivityViewController

时应考虑进行具体更改?

== UPDATE ==

我注意到当我评论添加TitleActivityItemProvider时,它工作正常,当我添加它时,它会复制网址,但我会忽略标题提供程序中的UIActivityType.copyToPasteboard并返回NSNull()

2 个答案:

答案 0 :(得分:1)

所以我在将项目添加到url.absoluteString

时使用activityItems修复了此问题
activityItems.append(url.absoluteString as AnyObject)

答案 1 :(得分:0)

您是否在模拟器上进行测试?在模拟器上我有这个问题,但在设备上它只粘贴一次。