如何更好地限制一个UITextField的输入长度
来源:互联网 发布:数据分析相关岗位 编辑:程序博客网 时间:2024/05/18 03:28
1.根据文本长度截取
- (void)textFieldDidChange:(UITextField *)textField{ if (textField == self.titleField) { if (textField.text.length > 20) { textField.text = [textField.text substringToIndex:20]; } }}
2.利用代理委托
我刚开始时候并没有发现-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)rangereplacementString:(NSString *)string这个委托方法没有响应最后拼音到汉字的过程,当我发现这个问题时,问题便也差不多得到了解决。因为在之前向微博上的一个朋友咨询时,他告诉我可以注册这个观察者 UITextInputCurrentInputModeDidChangeNotification在它的监听下可以得到中文。我刚开始时候理解错了他的意思,以为得到的就是最终选中的汉字,而中间输入的拼音并不会被得到。但其实这个监听,比以上的委托方法多了最后一步而已,即从拼音到中文的过程。所以实现的代码如下。<1>在init时候注册notification:[[NSNotificationCenterdefaultCenter]addObserver:self selector:@selector(textFiledEditChanged:) name:@"UITextFieldTextDidChangeNotification" object:myTextField];<2>实现监听方法:-(void)textFiledEditChanged:(NSNotification*)obj{ UITextField *textField = (UITextField *)obj.object; NSString *toBeString = textField.text; NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage]; // 键盘输入模式 if([lang isEqualToString:@"zh-Hans"]) { //简体中文输入,包括简体拼音,健体五笔,简体手写 UITextRange *selectedRange = [textField markedTextRange]; //获取高亮部分 UITextPosition *position = [textField positionFromPosition:selectedRange.startoffset:0]; //没有高亮选择的字,则对已输入的文字进行字数统计和限制 if(!position) { if(toBeString.length > kMaxLength) { textField.text = [toBeString substringToIndex:kMaxLength]; } } //有高亮选择的字符串,则暂不对文字进行统计和限制 else{ } } //中文输入法以外的直接对其统计限制即可,不考虑其他语种情况 else{ if(toBeString.length > kMaxLength) { textField.text= [toBeString substringToIndex:kMaxLength]; } }}<3>在dealloc里注销掉监听方法,切记!-(void)dealloc{ [[NSNotificationCenterdefaultCenter]removeObserver:self name:@"UITextFieldTextDidChangeNotification" object:_albumNameTextField];}
3
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string; { //string就是此时输入的那个字符textField就是此时正在输入的那个输入框返回YES就是可以改变输入框的值NO相反if ([string isEqualToString:@"\n"]) //按会车可以改变 { return YES; } NSString * toBeString = [textField.text stringByReplacingCharactersInRange:range withString:string]; //得到输入框的内容 if (self.myTextField == textField) //判断是否时我们想要限定的那个输入框 { if ([toBeString length] > 20) { //如果输入框内容大于20则弹出警告 textField.text = [toBeString substringToIndex:20]; UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:nil message:@"超过最大字数不能输入了" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil] autorelease]; [alert show]; return NO; } } return YES; }
4、利用键盘
//设置键盘类型self.textField.keyboardType = UIKeyboardTypeASCIICapable;define kAlphaNum @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"//判断是否是数字,不是的话就输入失败- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{NSCharacterSet *cs;cs = [[NSCharacterSet characterSetWithCharactersInString:kAlphaNum] invertedSet];NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""]; //按cs分离出数组,数组按@""分离出字符串BOOL canChange = [string isEqualToString:filtered];return self.textField.text.length>=5?NO: canChange;}
原文地址
iOS:UITextField中文输入法输入时对字符长度的限制
参考目录:——拓展
如何更好地限制一个UITextField的输入长度
iOS:UITextField中文输入法输入时对字符长度的限制
ios textField限制只能输入一定长度的字符
ios中怎样限制textfield只能输入字母和数字
IOS-TextField控件详解
0 0
- 如何更好地限制一个UITextField的输入长度
- 如何更好地限制一个UITextField的输入长度
- 如何更好地限制一个UITextField的输入长度
- 如何更好地限制一个UITextField的输入长度
- 如何更好地限制一个UITextField的输入长度
- 如何更好地限制一个UITextField的输入长度
- 如何更好地限制一个UITextField的输入长度
- 如何更好地限制一个UITextField的输入长度
- 如何更好地限制一个UITextField的输入长度
- 如何更好地限制一个UITextField的输入长度
- 20151130如何更好地限制一个UITextField的输入长度
- 如何更好地限制一个UITextField的输入长度
- 如何更好地限制一个UITextField的输入长度
- 如何更好地限制一个UITextField的输入长度
- 如何更好地限制一个UITextField的输入长度
- 如何更好地限制一个UITextField的输入长度
- 如何更好地限制一个UITextField的输入长度
- 如何更好地限制一个UITextField的输入长度
- android中Parcelable接口的使用
- three.js 矩阵式贴图
- js 保留n位小数
- jquery select 移动
- 为Android添加一门新语言
- 如何更好地限制一个UITextField的输入长度
- 异或(京东2017实习生真题)
- 将Excel文件转换为Html
- 西门子培训2——OID
- IMWeb训练营作业——todo list
- intellij导出第三方库
- CodeForces 602 A.Two Bases(水~)
- python学习笔记:2017/4/20-----1
- 使用Spire组件抛出异常The type initializer for 'spr857' threw an exception