限制一个UITextField的输入长度

来源:互联网 发布:淘宝怎么联系店家客服 编辑:程序博客网 时间:2024/04/27 17:07
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;}






0 0