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

具体实现方法:

[![复制代码](http://upload-images.jianshu.io/upload_images/10024011-f0f9155cb67c7542.gif?imageMogr2/auto-orient/strip)](javascript:void(0); "复制代码") 

<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word; font-family: &quot;Courier New&quot; !important; font-size: 12px !important;">@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];
    }

}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,955评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,468评论 19 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 13,871评论 6 13
  • 由张一山和周冬雨主演网剧《春风十里不如你》已经大结局了,这部网剧的各项评分都很好,可谓是一部口碑收视双丰收的网剧。...
    乖乖的瑷文阅读 5,121评论 6 9
  • 小说这一回回目,犵鸟蛮花天万里 朔云边雪路千盘。这一回,跌宕起伏,男猪脚刚出狼窟,又入虎穴,死里逃生,可谓...
    曾晓枫阅读 3,800评论 0 1