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

}
时间: 2024-10-21 22:22:18

TextFiled 中输入金额的相关文章

ios 判断textFiled中输入的字符是不是数字

//使用NSScanner类, [self isPureInt:textFiledLabel.text] //传入textFiledLabel获取的输入字符串并调用方法判断 - (BOOL)isPureInt:(NSString*)string{ NSScanner* scan = [NSScanner scannerWithString:string]; //定义一个NSScanner,扫描string int val; return[scan scanInt:&val] &&

输入金额,SpannableStringBuilder,Dialog无主题和透明背景的使用

转载请注明出处:http://blog.csdn.net/forwardyzk/article/details/43308573 整理了开发汇中遇到的一些小细节. 1.在EditText中输入金额,只能输入正确的金额格式,例如:0.01,0.1,0,123,123.0,123.01 activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:too

UITextField 限制输入金额(项目中遇到判断输入金额)

下面这个限制输入金额限制得很死: 1.要求用户输入首位不能为小数点; 2.小数点后不超过两位,小数点无法输入超过一个; 3.如果首位为0,后面仅能输入小数点: 4.输入金额不超过11位. 1 -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 2 { 3 if (textField.text.lengt

限制输入,输入金额 和保留小数点后两位

//判断是否是浮点类型 + (BOOL)isPureFloat:(NSString*)string { NSScanner* scan = [NSScanner scannerWithString:string]; float val; return [scan scanFloat:&val] && [scan isAtEnd];} //在textFiled中限制输入位数 if ([string isEqualToString:@""]) { return YE

iOS textField输入金额的限制,小数点前9位,后面两位

iOS textField输入金额的限制,小数点前9位,后面两位,如果不加小数点,最大位数是9位,加上小数点,最大位数是12位,超出最大位数可删除 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { // 判断是否输入内容,或者用户点击的是键盘的删除按钮 if (![string isEqualT

微信支付v3开发(5) 扫码并输入金额支付

关键字:微信支付 微信支付v3 动态native支付 统一支付 Native支付 prepay_id 作者:方倍工作室 本文介绍微信支付下的扫描二维码并输入自定义金额的支付的开发过程. 注意 微信支付现在分为v2版和v3版,2014年9月10号之前申请的为v2版,之后申请的为v3版.V3版的微信支付没有paySignKey参数.v2的相关介绍请参考方倍工作室的其他文章.本文介绍的为微信支付v3. 一. OAuth2.0授权 JSAPI 支付前需要调用 登录授权接口获取到用户的 Openid .所

Excel数据表中的金额由“元”转换为“万元”的方法

Excel数据表中的金额由"元"转换为"万元"的方法 2012-05-23 09:33:16|  分类: Office操作 |  标签:excel技巧  |举报|字号 订阅 有下列Excel数据表,金额栏的单位为"元",为简便起见,需将金额单位由"元"转换为"万元". 方法如下: 1.在任意单元格(如D2)输入"10000",并点击"复制"按钮: 2.选定拟转换为万元

eclipse中输入中文为繁体

http://blog.163.com/guomaolin_gavin/blog/static/199618307201218104452930/ eclipse中输入中文为繁体! 2012-02-08 10:44:52|  分类: eclipse|举报|字号 订阅 今天不小心在java编辑的时候发现eclipse中输入出来的是繁体! 百思不得其解之后发现了问题!是我的输入法和java中的快捷键进行了冲突.ctrl+shift+F 这个快捷方式和搜狗中的繁体是一样的! 当然还有其他的类似情况!

在浏览器中输入URL按下回车键后发生了什么

在浏览器中输入URL按下回车键后发生了什么 [1]解析URL[2]DNS查询,解析域名,将域名解析为IP地址[3]ARP广播,根据IP地址来解析MAC地址[4]分别从应用层到传输层.网络层和数据链路层分别加入各个层的头部封装为包[5]进行三次握手后,客户端与服务器建立连接[6]客服务器向客户端返回数据,浏览器接收到数据[7]浏览器开始渲染页面 补充:浏览器渲染页面详解 [1]由从服务器接收到的html形成DOM[2]样式被加载和解析,形成css对象模型CSSOM[3]DOM和CSSOM创建一个渲