限定UITextField输入

2017-05-17  本文已影响36人  PZcoder

在使用UITextField时,可能会需要限定UITextField的输入内容,此时需要在以下方法中 进行相关设置

1、限制输入字符类型

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSCharacterSet *cs;
//invertedSet方法是去反字符,把所有的除了NUMBERS 里的字符都找出来(包含去空格功能)

    cs = [[NSCharacterSet characterSetWithCharactersInString:NUMBERS]invertedSet];
 
// componentsJoinedByString 用于根据一个字符串来将数组连接成一个新的字符串。
    NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs]componentsJoinedByString:@""]; //按cs分离出数组,数组按@""分离出字符串
 
    BOOL canChange = [string isEqualToString:filtered];
 
    return canChange;
//这样写了以后,输入非数字时不能输入
}

//上面那个NUMBERS是一个宏,可以在文件顶部定义:

#define NUMBERS @”0123456789n” 

//这个代表可以输入数字和换行,请注意这个n,如果不写这个,Done按键将不会触发,如果用在SearchBar中,将会不触发Search事件,因为你自己限制不让输入n,好惨,我在项目中才发现的。

//所以,如果你要限制输入英文和数字的话,就可以把这个定义为:

#define kAlphaNum   @”ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789″

//当然,你还可以在以上方法return之前,做一提示的,比如提示用户只能输入数字之类的。如果你觉得有需要的话。

2、限制只能输入一定长度的字符

- (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]; //iOS8.3以后用 
UIAlertController
            [alert show]; 

/*
UIAlertController *alertView = [UIAlertController alertControllerWithTitle:@"提示"message:@"超过最大字数不能输入了"preferredStyle:UIAlertControllerStyleActionSheet];
        [selfpresentViewController:alertViewanimated:YEScompletion:nil];
*/
            return NO; 
        } 
    } 

    return YES; 
}
上一篇 下一篇

猜你喜欢

热点阅读