deleteBackwards
を10000回呼び出すと、これは10000 deleteBackwardsコマンドをXPC経由で送信し、ホストプロセスに送信し、逆シリアル化してから適用できる表現にシリアル化する必要があることを意味します。これはあなたの遅れの原因となる可能性があります。
deleteBackwards
コールを利用可能な現在のドキュメントコンテキストだけを削除するチャンクにバッチして、次のtextDidChangeコールを待って、最後のもののXミリ秒以内にある場合は、ユーザーがボタンを押した直後に別のテキストフィールドをタップしていないことを確認することができます。
以下は、私が意味するものを示す擬似コードです。
var lastDeleteAllPressed: Double
let threshHold = 0.1 // you'll need to test on a real device to get a real value for this.
func textDidChange() {
//whatever else you need to do
if CACurrentMediaTime - lastDeleteAllPressed < threshHold && !proxy.isEmpty {
deleteKeyPressed()
}
}
func deleteKeyPressed() {
let length = proxy.contextBeforeInput.append(proxy.contextAfterInput).length
0...length.forEach { deleteBackwards() }
lastDeleteAllPressed = CACurrentMediaTime()
}
この方法は、不要な作業をしないで、ユーザーが編集中のドキュメントに10000を超える文字があっても作業するという利点があります。欠点は、ホストプロセスがtextDidChangeイベントを返すために不自然に長くかかる場合に失敗する可能性があることです。
'UITextView' /' UITextField'の 'text'属性を空文字列に設定することはできませんか? – NRitH
また、この質問にはカスタムキーボードとは何の関係もありません。それは 'UIDocument'と' UITextView'だけです。 – NRitH
それはカスタムキーボードと関係があります。私は、どこでも好きな場所で使うことができるユーザー用のカスタムキーボードをインストールするアプリです。したがって、私はUITextfieldオブジェクトにアクセスすることができません。なぜなら、カスタムキーボードにはテキストとのやりとり方法が限られていたからです。 – Roymunson