【问题标题】:iOS 8.3, Keyboard Extenstion Safari issueiOS 8.3,键盘扩展 Safari 问题
【发布时间】:2015-04-17 06:32:19
【问题描述】:

我正在制作 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?

【问题讨论】:

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


    【解决方案1】:

    我也遇到过同样的问题。看来,如果你做insertTextadjustTextPosition,你不能立即调用deleteBackwardadjustTextPosition。我们目前的解决方法是使用 NSTimer 延迟一段时间:

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

    虽然delayedDelete 可能是这样的:

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

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

    【讨论】:

    • 我尝试使用 gcd 包装每个方法(例如 deleteBackword、adjust...),以便在延迟后运行,但它看起来像意外动画...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    • 2014-12-19
    • 1970-01-01
    相关资源
    最近更新 更多