0

我正在制作 iOS 键盘扩展。

但是当我在 Safari Web 中单击按钮后执行以下代码时,代理(UITextDocumentProxy)停止了。

[self.textDocumentProxy adjustTextPositionByCharacterOffset:-5];//stop here
for (int i = 0; i < 10; i ++) {
    [self.textDocumentProxy deleteBackward];
}
[self.textDocumentProxy insertText:@"__________"];

它在 safari-top-search-bar 中运行良好,但在其他纯文本框中停止。

dispatch_queue_t myQueue = dispatch_queue_create("com.test.online",0);
dispatch_async(myQueue, ^{
    [self.textDocumentProxy adjustTextPositionByCharacterOffset:-5];
    [NSThread sleepForTimeInterval:0.1];
    for (int i = 0; i < 10; i ++) {
        [self.textDocumentProxy deleteBackward];
    }
    [self.textDocumentProxy insertText:@"__________"];
});

如果我在adjustTextPositionByCharacterOffset之后将块放入另一个队列上的 dispatch_async 并有一些延迟。有用

但是,它也使我的代码在所有其他应用程序中变慢。

有什么好主意吗?或者有什么方法可以检测它是否是 Safari?

4

1 回答 1

0

我遇到过同样的问题。似乎如果你这样做insertTextor adjustTextPosition,你不能立即调用deleteBackwardor adjustTextPosition。我们目前的解决方法是使用 NSTimer 延迟一段时间:

[self.textDocumentProxy adjustTextPositionByCharacterOffset:-5];
[self delayedDelete];

虽然delayedDelete可能像:

[NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(deleteBackward) userInfo:nil repeats:NO];

我认为这是 iOS 的错误,尚未记录。

于 2015-04-23T10:27:49.337 回答