iOS8から搭載されたAppExtentionでキーボード拡張を開発するときのTIPSです。
キーボードがフォーカスしているテキストビューの文字をすべて削除する場合
for (int i=0; i<self.textDocumentProxy.documentContextBeforeInput.length+1; i++) {
[self.textDocumentProxy deleteBackward];
}
で消すのは間違いです。
何故ならばdeleteBackward
の実行には若干の時間が必要だからです。
例えば100文字の文字を上記コードで削除したあと、文字をinsertするコードを直後に書くと中途半端に削除された部分にinsertすることになります。
delayを設けても良いですが、self.textDocumentProxyにはhasTextというプロパティがあり、インプットに文字が存在するか確認することが出来ます。
while ([self.textDocumentProxy hasText]) {
[self.textDocumentProxy deleteBackward];
}
これで全ての文字を削除出来ます。