限制只能输入特定的字符
//(这个代表可以输入数字和换行,请注意这个\n,如果不写这个,Done按键将不会被触发,如果用在SearchBar中,将会不触发Search事件,因为你自己限制不让输入\n)
#define NUMBERS @"0123456789\n"
//如果你要限制输入英文和数字的话,可定义为
#define kLETTERNUM @"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
#pragma mark - UITextFieldDelegate
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSCharacterSet* cs;
//invertedSet方法是去反字符,把所有的除了数字字母的字符都找出来
cs = [[NSCharacterSet characterSetWithCharactersInString:kLETTERNUM] invertedSet];
//把输入框输入的字符string根据cs中字符一个一个去除,cs字符分割成单字符并转化为NSArray,然后componentsJoinedByString是把NSArray的字符通过“”无间隔连接成一个NSString字符赋给filtered,就是只剩数字和字母了
NSString* filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
BOOL canChange = [string isEqualToString:filtered];
return canChange;
}
当然,你还可以在以上方法return之前,做一提示的,比如提示用户只能输入数字之类的。
限制只能输入一定长度的字符
方法一:实现UITextField代理方法:
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (range.location >= 20)
{
show(@"超过最大字数不能输入了");
return NO;
}
return YES;
}
void show(id formatstring)
{
UIAlertView *Point = [[[UIAlertView alloc] initWithTitle:nil
message:formatstring
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil] autorelease];
[Point show];
}
或者
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
//string就是此时输入的那个字符,textField就是此时正在输入的那个输入框返回YES就是可以改变输入框的值
if ([string isEqualToString:@"\n"])//按回车可以改变
{
returnYES;
}
NSString* toBeString = [textField.text stringByReplacingCharactersInRange:range withString:string];//得到输入框的内容
if (_textField == textField)//判断是否是我们想要限定的那个输入框
{
if ([toBeString length] >20)
{
textField.text = [toBeString substringToIndex:20];
UIAlertView *alertView = [[[UIAlertView alloc] initWithTitle:nil
message:@"超过最大字数不能输入了"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil]autorelease];
[alertView show];
returnNO;
}
}
return YES;
}
方法二:
UITextField *nTextField = [[UITextField alloc] initWithFrame:CGRectMake(60, 0, 240, 40)];
nTextField.borderStyle = UITextBorderStyleNone;
nTextField.clearButtonMode = UITextFieldViewModeWhileEditing;
nTextField.delegate = self;
nTextField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
nTextField.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
nTextField.textAlignment = UITextAlignmentLeft;
nTextField.keyboardType = UIKeyboardTypeDefault;
nTextField.placeholder = @"3-16个字符,不区分大小写";
nTextField.font = [UIFont systemFontOfSize:12];
[nTextField addTarget:self action:@selector(limitTextlength:)forControlEvents:UIControlEventEditingChanged];
-(BOOL)limitTextlength:(UITextField *)textField
{
if ([textField.text length] >= 16) {
show(@"只能输入6-16个字符");
return NO;
}
return YES;
}