gpt4 book ai didi

iOS自定义键盘制作删除所有按钮

转载 作者:行者123 更新时间:2023-11-30 13:18:57 26 4
gpt4 key购买 nike

目前我的 iOS 自定义键盘有一个删除全部按钮。这是点击时的代码:

func deletekeyPressed(sender: UIButton!) {

for _ in 1..<10000 {
(textDocumentProxy as UIKeyInput).deleteBackward()
}

}

问题是,每当我单击按钮时,在删除所有文本之前都会出现明显的暂停。我很确定这是因为我调用了 deleteBackward() 10000 次。

有没有更快的方法来删除所有文本?

最佳答案

如果您调用 deleteBackwards 10000 次,这意味着 10000 个 deleteBackwards 命令必须序列化为某种可以通过 XPC 传输的表示形式,发送到主机进程,反序列化,然后应用。这可能是您延迟的原因。

我会将您的 deleteBackwards 调用批处理为删除不超过当前可用文档上下文的 block ,然后等待下一个 textDidChange 调用,如果它在上一个调用的 X 毫秒内,在新上下文中删除更多内容,因为您可以相当确定用户在按下按钮后不会很快点击另一个文本字段。

下面是一些伪代码,它演示了我的意思。

var lastDeleteAllPressed: Double
let threshHold = 0.1 // you'll need to test on a real device to get a real value for this.
func textDidChange() {
//whatever else you need to do
if CACurrentMediaTime - lastDeleteAllPressed < threshHold && !proxy.isEmpty {
deleteKeyPressed()
}
}
func deleteKeyPressed() {

let length = proxy.contextBeforeInput.append(proxy.contextAfterInput).length
0...length.forEach { deleteBackwards() }
lastDeleteAllPressed = CACurrentMediaTime()
}

这种方法的优点是不做不必要的工作,即使用户正在编辑的文档中有超过 10000 个字符也能正常工作。缺点是,如果主机进程需要非常长的时间来发回 textDidChange 事件,则可能会失败。

关于iOS自定义键盘制作删除所有按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37950541/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com