首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UITextField设置Swift中的最大字符长度

UITextField设置Swift中的最大字符长度
EN

Stack Overflow用户
提问于 2017-10-01 13:24:15
回答 1查看 4.4K关注 0票数 1

我如何覆盖这个UITextField函数,使它对最大字符数有一个限制?

代码语言:javascript
复制
override func shouldChangeText(in range: UITextRange, replacementText text: String) -> Bool {

}

我已经对堆栈做了一些研究,但我所能找到的只是这个函数(见下文)。首先,我看不出这是怎么回事,第二,它使用NSRange作为参数,在这里我有UITextRange。如何实施呢?谢谢

代码语言:javascript
复制
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
    }

我失败的尝试:

代码语言:javascript
复制
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')

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-01 14:03:32

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

代码语言:javascript
复制
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))
    }
}

您可以通过编程或使用接口生成器添加自定义文本字段:

代码语言:javascript
复制
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)
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46512802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档