iOS 8.3,键盘扩展Safari问题

时间:2015-04-17 06:32:20

标签: ios safari grand-central-dispatch ios-keyboard-extension ios8.3

我正在进行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并有一些延迟。的 It_works

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

有什么好主意吗?或者有没有办法检测它是否是Safari?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。如果您执行insertTextadjustTextPosition,则无法立即致电deleteBackwardadjustTextPosition。我们目前的解决方法是使用NSTimer延迟一段时间:

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

虽然delayedDelete可能是这样的:

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

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