美文网首页疯狂iOSiOS开发iOS Developer
防支付宝支付输入金额的逻辑 自动补零,小数点后两位输入

防支付宝支付输入金额的逻辑 自动补零,小数点后两位输入

作者: Booooooooom | 来源:发表于2017-09-28 09:48 被阅读137次

    今天有个朋友问了我支付宝支付 时,输入金额的逻辑怎么实现,想了想,之前在做二维码支付的时候,做过这样的需求,然后打开xcode,粘贴复制给了他我之前写的代码,完美解决。

    不知不觉分享代码,也成了一种习惯。我会尽量的去把自己项目里面功能封装起来,让更多的人去使用,用的轮子越多,才能以更高的效率去完成工作。加油吧!

    这里说一下具体需求
    1、未输入小数点时,自动补零(输入2,则显示2.00)
    2、只输入小数点之后,开始输入小数点后两位,并自动补零(直接输入 . 那么会显示0.00,再输入具体数字时,比如说1,则显示0.10)
    3、先输入数字,再输入小数点,开始输入小数点后两位(比如。输入 1. 此时显示的是1.00 ,再输入2,则显示1.20)
    4、项目要求的每次输入,清空之前的金额数目

    这里直接上代码,主要的就是在textField的代理方法:- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 中进行逻辑处理

    这里要注意,删除操作也会走代理,所以也要考虑到这个情况,里面的属性需要自行添加 比如 self.isSendDot

    
    - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
        textField.text = @"";
        return YES;
    }
    
    
    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
    {
        
        
        
        // 是否是删除
        if ([string isEqualToString:@""]) {
            if ([textField.text hasSuffix:@"."]) {
                self.isSendDot = NO;
            }
            
            return YES;
        }
        
        
        // 首先判断是否有小数点,有小数点,则说明不是第一次输入
        if ([string isEqualToString:@"."] && self.isSendDot == YES) {
            return NO;
        }
        if ([string isEqualToString:@"."]) {
            self.isSendDot = YES;
        }
        
        if ([textField.text containsString:@"."]) {
            
            
            if (self.isSendDot) {
                
                
                if ([string isEqualToString:@"."]) {
                    return NO;
                }
                
                NSArray *array = [textField.text componentsSeparatedByString:@"."]; //从字符A中分隔成2个元素的数组
                NSString *dotString = array[1];
                if ([dotString isEqualToString:@"00"]) {
                    textField.text = [NSString stringWithFormat:@"%@.%@", array[0],string];
                }else {
                    if (dotString.length >= 2) {
                        return NO;
                    }
                    textField.text = [NSString stringWithFormat:@"%@%@", textField.text,string];
                }
                
                
            }else {
                
                
                
                
                NSArray *array = [textField.text componentsSeparatedByString:@"."]; //从字符A中分隔成2个元素的数组
                NSString *MoneyString  = [NSString stringWithFormat:@"%@%@", array[0],string];
                textField.text = [NSString stringWithFormat:@"%@.%@", MoneyString,array[1]];
                
            }
            
            
            
            
        }else {
            self.isSendDot = NO;
            // 判断是否是输入的.
            if ([string isEqualToString:@"."]) {
                if (![textField.text isEqualToString:@""]) {
                    textField.text = [NSString stringWithFormat:@"%@.00", textField.text];
                    self.isSendDot = YES;
                }else {
                    textField.text = @"0.00";
                    self.isSendDot = YES;
                }
                
                
            }else {
                
                // 这里有可能是删除了  .  所有要加上判断
                if (![textField.text isEqualToString:@""]) {
                    textField.text = [NSString stringWithFormat:@"%@%@", textField.text,string];
                    
                }else {
                    // 第一次输入的是有效数字,拼接上.00
                    textField.text = [NSString stringWithFormat:@"%@%@", string,@".00"];
                }
                
                
            }
        }
        
        return NO;
    }
    
    

    专门做了一个测试的项目,有兴趣可以下载看一下https://github.com/bommmmmmm/customTextField.git
    如果可以的话,求个star 😝😝

    相关文章

      网友评论

        本文标题:防支付宝支付输入金额的逻辑 自动补零,小数点后两位输入

        本文链接:https://www.haomeiwen.com/subject/uxhmextx.html