UiTextField对输入的长度进行限制并提示用户还可输入的长度

时间:2022-05-06 01:29:47

最近想做用户昵称的限制,但是网上百度了很多方法效果都不是我自己想要的,终于找到种方法

如下:

1、声明两个属性

nickname是昵称的textfleld

canEditSizeLAbel是提示用户剩余可添加的数

@property (weak, nonatomic) IBOutlet UITextField *nickName;
@property(nonatomic,strong)UILabel *canEditSizeLabel;//可编辑数的label

2 给textfield添加一个点击事件,用来监听字数的变化

 //给textfield添加一个点击事件用来监听字数的变化
self.nickName.userInteractionEnabled = YES;
[self.nickName addTarget:self action:@selector(limitLength:) forControlEvents:UIControlEventEditingChanged];

3、监听用户的输入

//监听textfield的字数长度的变化
-(void)limitLength:(UITextField *)sender
{
//判断当前输入法是否是中文
bool isChinese;
if ([[[UITextInputMode currentInputMode] primaryLanguage] isEqualToString: @"en-US"]) {
isChinese = false;
}
else
{
isChinese = true;
} if(sender == self.nickName) {//判断当前输入框是我想要的输入框
// 8位
NSString *str = [[self.nickName text] stringByReplacingOccurrencesOfString:@"?" withString:@""];
if (isChinese) { //中文输入法下
UITextRange *selectedRange = [self.nickName markedTextRange];
//获取高亮部分
UITextPosition *position = [self.nickName positionFromPosition:selectedRange.start offset:0]; // 没有高亮选择的字,则对已输入的文字进行字数统计和限制
if (!position) {
// NSLog(@"汉字");
if ( str.length>8) {//长度大于8时进行截取
NSString *strNew = [NSString stringWithString:str];
[self.nickName setText:[strNew substringToIndex:8]];
} //改变提示信息
_canEditSizeLabel.text = [NSString stringWithFormat:@"还可输入%ld个字",8-(self.nickName.text.length)];
}
else
{
// NSLog(@"输入的英文还没有转化为汉字的状态"); }
}else{//非中文输入法下
// NSLog(@"str=%@; 本次长度=%d",str,[str length]);
if ([str length]>8) {
NSString *strNew = [NSString stringWithString:str];
[self.nickName setText:[strNew substringToIndex:8]];
} _canEditSizeLabel.text = [NSString stringWithFormat:@"还可输入%ld个字",8-(self.nickName.text.length)];
}
}
}