• 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];
        }
    
    }
  • 相关阅读:
    SSH、SCP和SFTP 解析(转)
    SQL Server数据库partition by 与ROW_NUMBER()函数使用详解 (转载)
    Git版本控制与工作流详解(转)
    IQueryable,IEnumberable,.AsEnumerable() 和 .AsQueryable() (转载)
    ASP.NET 中Http处理流程与 HttpModule,HttpHandler学习之初步认知
    xml Node 是否存在
    MVC-前台调用后台action 传递upload file 参数问题
    ResXResourceWriter 与ResourceWriter
    "= ="与 equals 的区别 摘录
    jpg文件格式分析
  • 原文地址:https://www.cnblogs.com/ningmengcao-ios/p/5825504.html
Copyright © 2020-2023  润新知