1

self.textDocumentProxy拡張機能の で作業するときにから複数のスペースを削除したいのKeyboardViewControllerですが、このアクションを具体的に実行する Apple がサポートする方法があるかどうか疑問に思っていましたか?

これまでのところ、私はかなり「ハックな」方法で次のことを行ってきました (ここでは、 で見つかった以前のすべての文字を削除しますtextDocumentProxy)。

for (int i = 0; i < self.textDocumentProxy.documentContextBeforeInput.length; i++){
        [self.textDocumentProxy deleteBackward];
    }

これに関する問題は methoddeleteBackwardにあります。どのプロンプトが表示されるかに応じて、documentContextBeforeInput削除するように指示された合計回数の約半分 (特に が 20 文字を超える場合は非常に信頼性が高くなります) を常に削除します。これはかなり信頼できないので、複数のスペース、またはすべてのテキストを簡単に削除する方法があるかどうか疑問に思っていましたtextDocumentProxy.documentContextBeforeInput

ありがとう!

4

3 に答える 3

1

使用しているループに根本的な問題があります:

for (int i = 0; i < self.textDocumentProxy.documentContextBeforeInput.length; i++){
    [self.textDocumentProxy deleteBackward];
}

i < self.textDocumentProxy.documentContextBeforeInput.lengthチェックは複数回実行されます。そして、.length属性は実際にはあなたがするたびに1ずつ減少してdeleteBackwardいます. iただし、反復ごとに 1 ずつ増加しています。

その結果、半分だけが削除されます。

問題を解決するには、順序を逆にすることができます。

for (int i = self.textDocumentProxy.documentContextBeforeInput.length; i > 0; i--){
    [self.textDocumentProxy deleteBackward];
}

変更を開始する前に、textDocument の元の長さをキャッシュすることもできます。

于 2014-09-26T11:26:38.523 に答える