今天有個(gè)朋友問(wèn)了我支付寶支付 時(shí),輸入金額的邏輯怎么實(shí)現(xiàn)撬槽,想了想,之前在做二維碼支付的時(shí)候趾撵,做過(guò)這樣的需求侄柔,然后打開(kāi)xcode,粘貼復(fù)制給了他我之前寫(xiě)的代碼占调,完美解決暂题。
不知不覺(jué)分享代碼,也成了一種習(xí)慣究珊。我會(huì)盡量的去把自己項(xiàng)目里面功能封裝起來(lái)薪者,讓更多的人去使用,用的輪子越多剿涮,才能以更高的效率去完成工作言津。加油吧攻人!
這里說(shuō)一下具體需求
1、未輸入小數(shù)點(diǎn)時(shí)悬槽,自動(dòng)補(bǔ)零(輸入2怀吻,則顯示2.00)
2、只輸入小數(shù)點(diǎn)之后初婆,開(kāi)始輸入小數(shù)點(diǎn)后兩位蓬坡,并自動(dòng)補(bǔ)零(直接輸入 . 那么會(huì)顯示0.00,再輸入具體數(shù)字時(shí)磅叛,比如說(shuō)1屑咳,則顯示0.10)
3、先輸入數(shù)字弊琴,再輸入小數(shù)點(diǎn)兆龙,開(kāi)始輸入小數(shù)點(diǎn)后兩位(比如。輸入 1. 此時(shí)顯示的是1.00 访雪,再輸入2详瑞,則顯示1.20)
4、項(xiàng)目要求的每次輸入臣缀,清空之前的金額數(shù)目
這里直接上代碼坝橡,主要的就是在textField的代理方法:- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 中進(jìn)行邏輯處理
這里要注意,刪除操作也會(huì)走代理精置,所以也要考慮到這個(gè)情況计寇,里面的屬性需要自行添加 比如 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)脂倦,則說(shuō)明不是第一次輸入
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個(gè)元素的數(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個(gè)元素的數(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;
}
專(zhuān)門(mén)做了一個(gè)測(cè)試的項(xiàng)目,有興趣可以下載看一下https://github.com/bommmmmmm/customTextField.git
如果可以的話赖阻,求個(gè)star ????