我可以阻止UIPasteboard使用Handoff从其他设备复制文本吗?

问题描述 投票:2回答:1

我有一个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个回答
0
投票

使用async函数检索数据并防止阻止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
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.