今天有個朋友問了我支付寶支付 時,輸入金額的邏輯怎么實現(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 ????