输入框 代理实时监听输入内容 以及限制输入纯数字金额
UITextField *txtField = [[UITextField alloc] initWithFrame:CGRectMake(10, 350, 200, 40)];
txtField.backgroundColor = [UIColor lightGrayColor];
txtField.delegate=self;
[self.viewaddSubview:txtField];
实现输入框代理,直接打印textField.text(比输入的内容少一位字符)监听不到当前输入的字符。string是当前输入的字符 这两个拼接到一起就是实时输入的内容。
//UITextFieldDelegate 代理方法
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
NSString*txtStr = [NSStringstringWithFormat:@"%@%@",textField.text,string];//实时输出内容
//第一种方式
// NSString * str = [NSString stringWithFormat:@"%@%@",textField.text,string];
// //匹配以0开头的数字
// NSPredicate * predicate0 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",@"^[0][0-9]+$"];
// //匹配两位小数、整数
// NSPredicate * predicate1 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",@"^(([1-9]{1}[0-9]*|[0])[.]?[0-9]{0,2})$"];
// return ![predicate0 evaluateWithObject:str] && [predicate1 evaluateWithObject:str] ? YES : NO;
/**第二种方式*/
NSString *toString = [textField.text stringByReplacingCharactersInRange:range withString:string];
if(toString.length>0) {
NSString *stringRegex = @"(\\+|\\-)?(([0]|(0[.]\\d{0,2}))|([1-9]\\d{0,4}(([.]\\d{0,2})?)))?";
NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", stringRegex];
BOOLflag = [phoneTestevaluateWithObject:toString];
if(!flag) {
returnNO;
}
}
PPLog(@"textfield--:%@---------:%ld----------:%@/n全部内容:-%@",textField.text,range.location,string,txtStr);
return YES;
}
还有一种不需要代理的的实时监听
[textField addTarget:selfaction:@selector(changedTextField:)forControlEvents:UIControlEventEditingChanged];
#pragmamark -给每个cell中的textfield添加事件,只要值改变就调用此函数
-(void)changedTextField:(id)textField{
NSLog(@"值是---%@",textField.text);
}
网友评论