TextFiled 中输入金额

Posted _水畔竹汐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TextFiled 中输入金额相关的知识,希望对你有一定的参考价值。

要求: 输入的金额不能超过六位,

       小数点后面只能输入两位小数

       如果 textFIled  中第一位输入的是0 ,后面必须输入小数点,否则禁止输入

      

用到 textfiled代理方法

#pragma mark ---- textFiledDelegate ----

- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{  

 

//当用户使用自动更正功能,把输入的文字修改为推荐的文字时,就会调用这个方法。  

//这对于想要加入撤销选项的应用程序特别有用  

//可以跟踪字段内所做的最后一次修改,也可以对所有编辑做日志记录,用作审计用途。     

//要防止文字被改变可以返回NO  

//这个方法的参数中有一个NSRange对象,指明了被改变文字的位置,建议修改的文本也在其中  

 

     return YES;  

}  

 

给 textFiled 添加一个监听方法,监听 textFiled 的输入

 

    [self.moneyTF addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];

 

具体实现方法:

@property (nonatomic, strong) NSString *max; // 默认99999.99
 _max = @"99999.99";//设置一个最大值

#pragma mark ---- textFiledDelegate ----
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    
    _tempText = textField.text;
    _tempRange = range;
    _tempString = string;
    
    if (string && string.length > 0) {
        // 输入
        if (_tempText.length == 0) {
            if ([string isEqualToString:@"."]) {
                _tempText = @"0";
                return YES;
            }else{
                return YES;
            }
            
        }else if (_tempText.length == 1){
            if ([_tempText isEqualToString:@"0"]) {
                if ([string isEqualToString:@"."]) {
                    return YES;
                }else{
                    return NO;
                }
            }
        }
        // 输入后不可超过 ‘99999.99‘
        if ([_tempText stringByAppendingString:string].floatValue > [_max floatValue]) {
            return NO;
        }
        // 不可超过8位
        if (_tempText.length >= _max.length) {
            return NO;
        }
        
        NSRange docRange = [_tempText rangeOfString:@"."];
        if (docRange.location != NSNotFound) {
            // 已输入小数点, 禁止再输入小数点
            if ([string isEqualToString:@"."]) {
                return NO;
            }
            // 小数点后位数
            NSUInteger decimals = _tempText.length - (docRange.location + docRange.length);
            if (decimals == 2) {
                // 小数点后两位,禁止输入任何字符
                return NO;
            }else if (decimals == 1){
                // 小数点后一位,禁止输入 ‘0‘
                if ([string isEqualToString:@"0"]) {
                    return NO;
                }
            }
        }else{
            if (_tempText.length == 0) {
                // 第一位
                if ([string isEqualToString:@"."] || [string isEqualToString:@"0"]) {
                    return NO;
                }
            }
        }
    }
    
    return YES;
}

-(void)textFieldDidChange :(UITextField *)theTextField{

    NSRange docRange = [_tempText rangeOfString:@"."];
    if (_tempString &&_tempString.length > 0) {
        //* 输入 */
        if (docRange.location != NSNotFound) {
            //有小数点
            theTextField.text = [NSString stringWithFormat:@"%@%@",_tempText,_tempString];
        }else {
            if ([_tempString isEqualToString:@"."]) {
                //是小数点
                theTextField.text = [NSString stringWithFormat:@"%@%@",_tempText,_tempString];
            }else {
                //不是小数点
                theTextField.text = [NSString stringWithFormat:@"%ld",_tempText.integerValue * 10 + _tempString.integerValue];
            }
        }
    }else {
    
        //删除
        theTextField.text = [_tempText substringToIndex:_tempText.length -1];
    }

}

 

以上是关于TextFiled 中输入金额的主要内容,如果未能解决你的问题,请参考以下文章

Libgdx之TextFiled 文本输入框

Libgdx之TextFiled 文本输入框

自定义UItextFiled,限制TextFiled 的输入长度

textView的提醒文字

ios开发怎么限制textfiled只输入数字和小数点,有小数时保留两位小数

输入框内格式化金额银行卡号