UITextField、UITextView 字数限制

iOS输入框字数限制,需要注意判断高亮状态,否则加入需要限制输入10个字,在输入9个字之后,再次使用系统拼音键盘就输入不了了。输入的拼音会被截取。正确做法如下:

UITextfield

nickNameTextfield.addTarget(self, action: #selector(nickNameValueChanged), for: .editingChanged)

    @objc func nickNameValueChanged() {
        guard let text = nickNameTextfield.text else {
            return
        }
        // 判断是否存在高亮字符,如果有,则不进行字数统计和字符串截断
        if let selectedRange = nickNameTextfield.markedTextRange {
            let position = nickNameTextfield.position(from: selectedRange.start, offset: 0)
            if position != nil {
                return
            }
        }
        if text.count > 12 {
            nickNameTextfield.text = text.substring(to: 12)
        }
    }
UITextView

textView和textfield类似,只是不需要添加通知,直接使用代理方法判断即可。

   /// 限制输入字数
    func textViewDidChange(_ textView: UITextView) {
        // 判断是否存在高亮字符,如果有,则不进行字数统计和字符串截断
        if let selectedRange = textView.markedTextRange {
            let position = textView.position(from: selectedRange.start, offset: 0)
            if position != nil {
                return
            }
        }
        if let text = textView.text, text.count > 12 {
            textView.text = text.substring(to: 12)
        }
    }

你可能感兴趣的:(UITextField、UITextView 字数限制)