UITextField限制字数

作者: CyrusCao | 来源:发表于2016-06-30 08:23 被阅读537次

通常,我们需要对 UITextField 的最大输入字符数进行限制。在编辑的时候进行限制总比提交表单后提示错误强。

第一步:添加委托

使 UITextView 所在的 UIViewController 遵从 UITextViewDelegate 协议,这次我们使用 extension :

extension MyViewController: UITextFieldDelegate{
    //your code
}

第二步:实现协议中的监听方法

对于 UITextField 来说:

extension MyViewController: UITextFieldDelegate{
    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
        guard let oldText = textField.text else {return true}
        let newLength = oldText.characters.count + string.characters.count
        return newLength <= 17
    }
}
  • textField: 当前 UITextField 对象

  • range: 将要被替换的文本的范围

  • string: 将要替换为的文本

  • 17 是我们定义的最大输入限制字数

首先使用 guard 语句确保当前文本框内有文字内容。然后计算字符串改变之后的新长度,等于旧长度加上新长度。最后返回一个布尔值,判断长度是否大小于等于17,如果小于则可以把内容显示到文本框中,否则再继续输入也没有反应。

对于 UITextView 来说:

该协议的监听方法的内容基本一致,只是把方法中的关键字名称替换了就可以了。可能还需要限制 UITextView 的输入行数:

textView.textContainer.maximumNumberOfLines = 10

相关文章

网友评论

  • uncleRX:考虑下联想输入。根本就不进代理方法
    CyrusCao:@uncleRX 您提出的这个问题确实很值得深思。
    CyrusCao:@uncleRX 选择联想输入的内容后,用户会发现根本没有显示联想输入的内容,这本身就起到提示并且限制用户输入长度的作用了。如果要考虑联想输入的话,我觉得更简单的方式还是弄一个输入字数提示框比较方便:
    (5/17)
    :smile:
  • X先生_vip:这个应该是没有考虑到在使用简体中文输入的情况,如果在使用简体中文输入的情况下,最后一个字应该是输入不进去的
    CyrusCao:@青楼 嗯,的确是个好办法!
    X先生_vip:@CyrusCao 可以监听当前为简体中文的时候、忽略拼音的长度
    CyrusCao:@青楼 是的 如果是中文的话 所限制的字数其实是最后一个字的拼音。所以如果要对中文进行限制,需要多留出3到6个字符的富余。或者像微信的个性签名一样,直接不显示多出来的字符以提示用户。

本文标题:UITextField限制字数

本文链接:https://www.haomeiwen.com/subject/kbuxjttx.html