0

我在做iOS键盘扩展。iOS 8.3,键盘扩展Safari问题

但是当我在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:@"__________"]; 
}); 

如果我把块到dispatch_async上另一个队列一些延迟后adjustTextPositionByCharacterOffsetIt_works

但它使我的代码在其他应用程序也缓慢。

任何好主意?或者有什么办法来检测它是否是Safari?

回答

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的一个bug,尚未记录在案。

+0

我试图用gcd来包装每种方法(比如deleteBackword,adjust ...),以便在延迟后运行,但它看起来像是无意识的动画... –