我正在进行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?
答案 0 :(得分:0)
我遇到了同样的问题。如果您执行insertText
或adjustTextPosition
,则无法立即致电deleteBackward
或adjustTextPosition
。我们目前的解决方法是使用NSTimer延迟一段时间:
[self.textDocumentProxy adjustTextPositionByCharacterOffset:-5];
[self delayedDelete];
虽然delayedDelete
可能是这样的:
[NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(deleteBackward) userInfo:nil repeats:NO];
我认为这是iOS的一个错误,尚未记录。