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 ...),以便在延遲後運行,但它看起來像是無意識的動畫... –