gpt4 book ai didi

swift - UITextField 在 Swift 中设置最大字符长度

转载 作者:行者123 更新时间:2023-11-30 12:06:59 36 4
gpt4 key购买 nike

如何重写此 UITextField 函数以限制最大字符数?

override func shouldChangeText(in range: UITextRange, replacementText text: String) -> Bool {

}

我对堆栈做了一些研究,但我能找到的只是这个函数(见下文)。首先,我看不出这是如何覆盖的,其次,它使用 NSRange 作为我有 UITextRange 的参数。如何实现?谢谢

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, 
replacementString string: String) -> Bool {
let currentString: NSString = textField.text! as NSString
let newString: NSString = currentString.replacingCharacters(in: range, with: string) as NSString
return newString.length <= 4
}

我失败的尝试:

override func shouldChangeText(in range: UITextRange, replacementText text: String) -> Bool {
let currentString: NSString = self.text! as NSString
let newString: NSString = currentString.replacingCharacters(in: range, with: text) as NSString
return newString.length <= 4
}

错误:无法将“UITextRange”类型的值转换为预期参数类型“NSRange”(又名“_NSRange”)

最佳答案

您可以子类化 UITextField 并添加 UIControlEvents EditingChanged 的​​目标。在选择器方法中,您可以使用集合方法前缀来限制添加到文本字段文本属性的字符,如下所示:

import UIKit
class LimitedLengthField: UITextField {
var maxLength: Int = 10
override func willMove(toSuperview newSuperview: UIView?) {
addTarget(self, action: #selector(editingChanged), for: .editingChanged)
editingChanged()
}
@objc func editingChanged() {
text = String(text!.prefix(maxLength))
}
}
<小时/>

您可以通过编程方式或使用界面生成器添加自定义文本字段:

import UIKit

class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let limitedLenghtField = LimitedLengthField(frame: CGRect(origin: CGPoint(x: 50, y: 50), size: CGSize(width: 200, height: 50)))
limitedLenghtField.text = "123456789012345"
view.addSubview(limitedLenghtField)
}
}

关于swift - UITextField 在 Swift 中设置最大字符长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46572055/

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