【问题标题】:Can I prevent UIPasteboard from using Handoff to copy text from another device?我可以阻止 UIPasteboard 使用 Handoff 从其他设备复制文本吗?
【发布时间】:2018-05-06 20:00:00
【问题描述】:

我有一个 iOS 应用程序,它查看粘贴板的内容并尝试用它做一些(希望)智能的事情。 (该应用需要 iOS 9.3+,但我想大多数人都在使用 iOS 11.x。)

问题是我的设备 (iPhone X) 总是从我的 MacBook Pro 复制数据。例如,我可以在我的 MacBook 上选择和复制文本,然后将其放入粘贴板中。然后在我的 iPhone 上,我可以选择并复制诸如我的电子邮件地址之类的文本,然后将其放到那里的粘贴板上。但是当我运行我的应用程序并尝试访问粘贴板时,它需要几秒钟然后使用我 MacBook 中的文本!

这特别烦人,因为它在通过网络拉取数据时会导致延迟,从而使我的 UI 无响应。我宁愿让[UIPasteboard -hasStrings] 方法立即返回。

我知道我可以在添加项目时使用setItems:options:UIPasteboardOptionLocalOnly 选项值,这样这些项目将保留在设备上而不是转移到MacBook。但该选项不会阻止粘贴板自动从 MacBook 中提取数据。

有什么方法可以防止hasStrings 自动从远程笔记本电脑中提取数据,而无需在设备上完全禁用该功能(即,我不想强​​制用户在系统级别禁用 Handoff所有应用程序)。

【问题讨论】:

    标签: ios handoff


    【解决方案1】:

    使用异步函数来检索数据并防止阻塞 UI。像这样的:

    func getStringFromClipboard(completion: @escaping (_ copiedString: String?) -> Void) {
        DispatchQueue.global(qos: .userInitiated).async {
            let pastboardString = UIPasteboard.general.string
    
            DispatchQueue.main.async {
                completion(pastboardString)
            }
        }
    }
    

    然后:

    override func viewWillAppear(_ animated: Bool) {
        super.viewWilAppear(animated)
        getStringFromClipboard { (copiedString) in
            guard let copiedString = copiedString else {
                return
            }
            // your code if clipboard contains string
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-04
      • 1970-01-01
      • 2018-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-09
      相关资源
      最近更新 更多