gpt4 book ai didi

iOS 13 崩溃与 SwipeKeyboard 和文本字段 :shouldChangeCharactersIn:

转载 作者:行者123 更新时间:2023-12-01 15:33:37 28 4
gpt4 key购买 nike

在 iOS 13 中,当实现 shouldChangeCharactersIn通过 UITextfieldDelegate ,使用滑动键盘时应用程序崩溃。

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if let text = textField.text as NSString? {
let txtAfterUpdate = text.replacingCharacters(in: range, with: string)
textField.text = txtAfterUpdate
}
return false
}

这是苹果的错误吗?

最佳答案

我能够重现这一点 - 如果您在滑动输入期间改变 UITextField 上的文本状态 - 并且仅在滑动输入期间,它会尝试重新插入滑动的内容(即使您返回 false),这会重新触发您的委托(delegate)事件,这开始了递归循环。

这有点像黑客,但你可以用类似的东西捕获它

    private var lastEntry: String?

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if string.count > 1 && string == lastEntry { // implies we're swiping or pasting
print("Caught unwanted recursion")
return
}
lastEntry = string
if let text = textField.text as NSString? {
let txtAfterUpdate = text.replacingCharacters(in: range, with: string)
textField.text = txtAfterUpdate
}
return false
}

它会阻止用户连续两次粘贴/滑动相同的东西,但至少它会让他们在 Apple 解决问题时滑动。

关于iOS 13 崩溃与 SwipeKeyboard 和文本字段 :shouldChangeCharactersIn:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58560843/

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