gpt4 book ai didi

ios - 最大输入后禁用 UITextField 光标移动

转载 作者:行者123 更新时间:2023-11-29 05:24:00 25 4
gpt4 key购买 nike

我为固定大小的输入创建了一个自定义 UITextField 组件。 TextField 的宽度、字体大小、字偶距和字符数都是固定的。我可以阻止用户输入超过 8 个字符(请参见下面的 shouldChangeCharactersIn 方法),但是在第 8 个字符之后,光标自动移动到下一个位置,这会产生以下问题。

problematic gif

我想显示所有输入的字符而不减小其大小。所以

[ 1 2 3 4 5 6 7 8 ] should be shown instead of [ 2 3 4 5 6 7 8 | ]

我尝试将光标放在第 8 个字符的右侧,但这会更改所有字距调整并影响所有其他字符。

处理这个问题的正确方法是什么?我应该如何防止光标移动,以便 UITextField 不会向右滚动?

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
guard let textFieldText = textField.text,
let rangeOfTextToReplace = Range(range, in: textFieldText),
!string.containsSpecialCharacters else {
return false
}
let substringToReplace = textFieldText[rangeOfTextToReplace]
let count = textFieldText.count - substringToReplace.count + string.count

return count <= 8
}

最佳答案

我通过更改最后一个字符后的紧排解决了这个问题。所以现在,光标不再跳转 40pt,而是仅跳转 1pt(或者您在下面的方法中设置的任何内容)

@objc private func textFieldDidChange() {

guard let text = textField.text else { return }

if text.count == Constant.deviceCodeCharacterCount {
let attributedString = NSMutableAttributedString(string: text)
attributedString.addAttribute(.kern, value: Constant.deviceCodeCharacterSpacing, range: NSRange(location: 0, length: text.count - 1))
attributedString.addAttribute(.kern, value: 1, range: NSRange(location: Constant.deviceCodeCharacterCount - 1, length: 1))
textField.attributedText = attributedString
}
}

enter image description here

关于ios - 最大输入后禁用 UITextField 光标移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58370637/

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