UITextField和UITextView正确限制输入字符长度,中文汉字预输入正确处理方式

        一般而言,字符串输入长度限制,在要求不是很高的情况下,直接在textField或textView的didEndEditing方法中进行提示和文字截取,即可满足开发的需要;

 

        对于需要在输入过程中限制字符串输入长度的情况下,则只能在textDidChange中处理,然而直接在这里限制也还是会有限制不完美的问题,即在输入中文时,存在预录入中文汉字的问题,这时候如果直接进行限制,则会在你输入时,当输入的拼音字符满足限制条件的情况下就会直接提示限制文字。 为了解决这个问题,因此需要对预录入文字进行相应的处理。

 

处理步骤:

    1. 在适当的地方添加textDidChange的通知

NotificationCenter.default.addObserver(self, selector: #selector(textDidChanged), name: UITextField.textDidChangeNotification, object: textField)

   2. 在通知中进行字符限制处理

let textfield = textField as! UITextField
//获取当前键盘输入的语言
let lang = textField.textInputMode?.primaryLanguage
//为汉字输入时,特别处理
if lang == "zh-Hans" {
	let range = textfield.markedTextRange
	if range == nil {
		if (textfield.text?.count)! >= length {
			textfield.text = String((textfield.text?.prefix(length))!)
		}
	}
} else {
	if (textfield.text?.count)! >= length {
		textfield.text = String((textfield.text?.prefix(length))!)
	}
}

  3. 在适当的地方移除通知监听

NotificationCenter.default.removeObserver(self)

 

以上是以UITextField为例, UITextView的处理方式一样。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值