UITextField设置Swift中的最大字符长度
如何重写此UITextField函数,使其限制最大字符数UITextField设置Swift中的最大字符长度,swift,count,uitextfield,character-limit,Swift,Count,Uitextfield,Character Limit,如何重写此UITextField函数,使其限制最大字符数 override func shouldChangeText(in range: UITextRange, replacementText text: String) -> Bool { } 我对堆栈做了一些研究,但我能找到的只是这个函数(见下文)。首先,我看不出这怎么可能是一个覆盖,其次,它使用NSRange作为参数,其中我有uitextange。如何实现这一点?谢谢 func textField(_ textField: U
override func shouldChangeText(in range: UITextRange, replacementText text: String) -> Bool {
}
我对堆栈做了一些研究,但我能找到的只是这个函数(见下文)。首先,我看不出这怎么可能是一个覆盖,其次,它使用NSRange作为参数,其中我有uitextange。如何实现这一点?谢谢
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
}
func textField(textField:UITextField,shouldChangeCharacters范围:NSRange,
替换字符串:字符串)->Bool{
让currentString:NSString=textField.text!作为NSString
让newString:NSString=currentString.replacingCharacters(在:范围内,带:字符串)作为NSString
return newString.length Bool{
让currentString:NSString=self.text!作为NSString
让newString:NSString=currentString.replacingCharacters(在:范围内,带:文本)作为NSString
return newString.length您可以将UITextField子类化,并为UIControlEvents editingChanged添加目标。在选择器方法内,您可以使用collection method prefix限制添加到textfield文本属性的字符,如下所示:
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)
}
}
有趣的是,你还回答了我的另一个问题,那就是如何在#选择器中添加一个带有参数的函数。哪一个?你能发布链接吗?你的建议很好,我很高兴现在有了一个有效的答案。但是我仍然想知道如何更改我复制的代码以匹配shouldChangeText函数UITextField类中的错误。我想我面临的唯一问题是,一个使用uitextange,另一个使用NSRange,但不匹配。请参阅编辑中失败的尝试。我得到的错误是“无法将类型为‘uitextange’的值转换为预期的参数类型‘NSRange’(又称‘NSRange’)”对不起,我刚刚看到你的评论。我不知道复选标记。我现在进行了检查和投票。谢谢。
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)
}
}