输入框 代理实时监听输入内容 以及限制输入纯数字金额

输入框 代理实时监听输入内容 以及限制输入纯数字金额


    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);

}

你可能感兴趣的:(输入框 代理实时监听输入内容 以及限制输入纯数字金额)