限制文本编辑字数的方法整理

最近在项目中发现原来的一些代码的textFiled在限制字数上总是出现这样或那样的问题,今天就来整理一下几种常用的方法.

第一种比较简单粗暴,索然也能达到想要的结果,但是用户体验不太好:

-(void)textFieldDidEndEditing:(UITextField *)textField{

if (textField.text.length > 5) {

textField.text = [textField.text substringToIndex:5];

}

}

//点击return结束编辑

-(BOOL)textFieldShouldReturn:(UITextField *)textField{

[textField resignFirstResponder];

return YES;

}

就是在textFiled的代理方法中结束编辑时判断一下字数长度进行截断,比较生硬.

第二种方法是动态的判断文本框中字数,以达到判断的目的,也是使用textFiled的代理方法

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{

NSString *tostring = [textField.text stringByReplacingCharactersInRange:range withString:string];

//必须加上markedTextRange的判断,否则在系统自带的输入法中会把未选中之前的拼音也算成字符串长度,若在搜狗输入法上不加此判断也没有问题

if (textField.markedTextRange == nil) {

if (tostring.length > 5) {

textField.text = [tostring substringToIndex:5];

return NO;

}

}

return YES;

}

第三种方法使用textFiled中提供的监听方式UITextFieldTextDidChangeNotification:

首先在viewwillappear中设置监听

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(TextFiledDidChangeAction:) name:UITextFieldTextDidChangeNotification object:nil];

然后实现监听到事件时要执行的方法

-(void)TextFiledDidChangeAction:(NSNotification *)noti{

//必须加上markedTextRange的判断,否则在系统自带的输入法中会把未选中之前的拼音也算成字符串长度,若在搜狗输入法上不加此判断也没有问题

if (_textFiled.markedTextRange == nil) {

if (_textFiled.text.length>5) {

_textFiled.text = [_textFiled.text substringToIndex:5];

}

NSLog(@"change");

}

}

但是第二种方式的话只有在不符合条件后再次触发键盘才会返回NO,因此第三种方式作为合适

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容