2017-11-22 7 views
2

私はペーストボードの内容を見て、それと知的な何か(うまくいけば)をしようとするiOSアプリを持っています。 (この時点では、ほとんどの人がiOS 11.xを使用していると思うが、現時点ではiOS 9.3以降が必要です)UIPasteboardがHandoffを使用して別のデバイスのテキストをコピーできないようにすることはできますか?

問題は、私のデバイス(iPhone X)が常にMacBook Proのデータをコピーしてしまうことです。たとえば、MacBookでテキストを選択してコピーし、そこのペーストボードに貼り付けることができます。その後、私のiPhoneでは、自分のメールアドレスなどのテキストを選択してコピーし、そこのペーストボードに貼り付けることができます。しかし、アプリを起動してペーストボードにアクセスしようとすると、数秒でMacBookのテキストが使用されます。

これは、ネットワークを介してデータを取得している間に遅延が発生し、UIが応答しなくなるため、特に厄介です。私はむしろただちに[UIPasteboard -hasStrings]メソッドをすぐに返すようにしたいと思います。

setItems:options:のオプション値をUIPasteboardOptionLocalOnlyとすると、アイテムを追加するときにそのアイテムがデバイスに残り、MacBookに転送されないようにすることができます。しかし、このオプションは、ペーストボードがMacBookから自動的にデータを取り込むことを妨げるものではありません。

hasStringsがリモートラップトップからデータを自動的にプルするのを防ぐ方法はありますか?デバイス上でその機能を完全に無効にすることはできません(つまり、全員がシステムレベルでハンドオフを強制的に無効にしたくないアプリ)。

答えて

0

非同期機能を使用すると、データを取得して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 
    } 
} 
関連する問題