今天有个朋友问了我支付宝支付 时,输入金额的逻辑怎么实现,想了想,之前在做二维码支付的时候,做过这样的需求,然后打开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 😝😝