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