防支付寶支付輸入金額的邏輯 自動補(bǔ)零,小數(shù)點(diǎn)后兩位輸入

今天有個朋友問了我支付寶支付 時,輸入金額的邏輯怎么實現(xiàn),想了想,之前在做二維碼支付的時候,做過這樣的需求,然后打開xcode,粘貼復(fù)制給了他我之前寫的代碼,完美解決。

不知不覺分享代碼,也成了一種習(xí)慣。我會盡量的去把自己項目里面功能封裝起來,讓更多的人去使用,用的輪子越多,才能以更高的效率去完成工作。加油吧!

這里說一下具體需求
1、未輸入小數(shù)點(diǎn)時,自動補(bǔ)零(輸入2,則顯示2.00)
2、只輸入小數(shù)點(diǎn)之后,開始輸入小數(shù)點(diǎn)后兩位,并自動補(bǔ)零(直接輸入 . 那么會顯示0.00,再輸入具體數(shù)字時,比如說1,則顯示0.10)
3、先輸入數(shù)字,再輸入小數(shù)點(diǎn),開始輸入小數(shù)點(diǎn)后兩位(比如。輸入 1. 此時顯示的是1.00 ,再輸入2,則顯示1.20)
4、項目要求的每次輸入,清空之前的金額數(shù)目

這里直接上代碼,主要的就是在textField的代理方法:- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 中進(jìn)行邏輯處理

這里要注意,刪除操作也會走代理,所以也要考慮到這個情況,里面的屬性需要自行添加 比如 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;
    }
    
    
    // 首先判斷是否有小數(shù)點(diǎn),有小數(shù)點(diǎn),則說明不是第一次輸入
    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個元素的數(shù)組
            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個元素的數(shù)組
            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 {
                // 第一次輸入的是有效數(shù)字,拼接上.00
                textField.text = [NSString stringWithFormat:@"%@%@", string,@".00"];
            }
            
            
        }
    }
    
    return NO;
}

專門做了一個測試的項目,有興趣可以下載看一下https://github.com/bommmmmmm/customTextField.git
如果可以的話,求個star ????

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容