UiTextField对输入的长度进行限制并提示用户还可输入的长度
最近想做用户昵称的限制,但是网上百度了很多方法效果都不是我自己想要的,终于找到种方法
如下:
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)]; } } }
对上述的代码,有任何疑问,可以在下方留言。
也可以给我发邮件咨询:673658917@qq.com
或者是直接加qq:673658917
转载请注明出处,谢谢合作。
睡觉舒服,那是给死人准备的,加油吧,一年后你会感谢现在的自己的。