金額輸入限制(小數(shù)點后兩位+最多不超過10億)
代碼:
初始化
_moneyTextField = [[UITextField alloc] init];
_moneyTextField.font = [UIFont systemFontOfSize:14];
_moneyTextField.placeholder = @"請?zhí)顚懩繕?biāo)";
_moneyTextField.textColor = UIColorHex(5C5C5C);
_moneyTextField.borderStyle = UITextBorderStyleNone;
_moneyTextField.textAlignment = NSTextAlignmentLeft;
_moneyTextField.keyboardType = UIKeyboardTypeDecimalPad;
[self.contentView addSubview:_moneyTextField];
_moneyTextField.delegate = self;
[_moneyTextField addTarget:self action:@selector(textfieldTextDidChange:) forControlEvents:UIControlEventEditingChanged];
[_moneyTextField addTarget:self action:@selector(textfieldEditingDidBegin:) forControlEvents:UIControlEventEditingDidBegin];
[_moneyTextField addTarget:self action:@selector(textfieldEditingDidEnd:) forControlEvents:UIControlEventEditingDidEnd];
/**
金額的判斷,不超過十億+小數(shù)點后兩位
*/
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (textField == _moneyTextField) {
NSScanner *scanner = [NSScanner scannerWithString:string];
NSCharacterSet *numbers;
NSRange pointRange = [textField.text rangeOfString:@"."];
if ((pointRange.length > 0) && (pointRange.location < range.location || pointRange.location > range.location + range.length)) {
numbers = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
} else {
numbers = [NSCharacterSet characterSetWithCharactersInString:@"0123456789."];
}
if ([textField.text isEqualToString:@""] && [string isEqualToString:@"."] ) {
return NO;
}
short remain = 2; //默認(rèn)保留2位小數(shù)
NSString *tempStr = [textField.text stringByAppendingString:string]; // 原來的字符+當(dāng)前輸入的字符
NSUInteger strlen = [tempStr length];
if(pointRange.length > 0 && pointRange.location > 0) { //判斷輸入框內(nèi)是否含有“.”。
if([string isEqualToString:@"."]) { //當(dāng)輸入框內(nèi)已經(jīng)含有“.”時,如果再輸入“.”則被視為無效。
return NO;
}
if(strlen > 0 && (strlen - pointRange.location) > remain+1) { //當(dāng)輸入框內(nèi)已經(jīng)含有“.”,當(dāng)字符串長度減去小數(shù)點前面的字符串長度大于需要要保留的小數(shù)點位數(shù),則視當(dāng)次輸入無效。
return NO;
}
}
NSRange zeroRange = [textField.text rangeOfString:@"0"];
if(zeroRange.length == 1 && zeroRange.location == 0){ //判斷輸入框第一個字符是否為“0”
if(![string isEqualToString:@"0"] && ![string isEqualToString:@"."] && [textField.text length] == 1){ //當(dāng)輸入框只有一個字符并且字符為“0”時,再輸入不為“0”或者“.”的字符時,則將此輸入替換輸入框的這唯一字符。
textField.text = string;
return NO;
}else{
if(pointRange.length == 0 && pointRange.location > 0){ //當(dāng)輸入框第一個字符為“0”時,并且沒有“.”字符時,如果當(dāng)此輸入的字符為“0”,則視當(dāng)此輸入無效。
if([string isEqualToString:@"0"]){
return NO;
}
}
}
}
NSString *buffer;
if ( ![scanner scanCharactersFromSet:numbers intoString:&buffer] && ([string length] != 0) )
{
return NO;
}
// 大于10億的時候不能再編輯
if ([tempStr longLongValue] >= 1000000000) {
return NO;
}
}
return YES;
}
- (void)textfieldEditingDidBegin:(UITextField *)textField
{
if ([textField.text containsString:@"元"]) {
textField.text = [textField.text stringByReplacingOccurrencesOfString:@"元" withString:@""];
}
if ([textField.text containsString:@","]) {
textField.text = [textField.text stringByReplacingOccurrencesOfString:@"," withString:@""];
}
}
- (void)textfieldEditingDidEnd:(UITextField *)textField
{
textField.text = [NSString stringWithFormat:@"%@元", [NSString balanceFormatFromStr:[NSString stringWithFormat:@"%.2f", [textField.text doubleValue]]]];
}
用到的NSString的分類
/**
* 格式化每三位帶逗號的數(shù)據(jù)
* @param string 余額數(shù)據(jù)字符串
* @return 帶逗號余額
*/
+ (NSString *)balanceFormatFromStr:(NSString*)string
{
NSNumberFormatter *numFormatter = [[NSNumberFormatter alloc] init];
[numFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
NSNumberFormatter *numFormatter2 = [[NSNumberFormatter alloc] init];
[numFormatter2 setNumberStyle:NSNumberFormatterNoStyle];
NSNumber *num = [numFormatter2 numberFromString:string];
NSString *tempStr = [numFormatter stringFromNumber:num];
NSString *balanceStr = [tempStr substringFromIndex:1];
if ([tempStr hasPrefix:@"-"]) {
balanceStr = [NSString stringWithFormat:@"-%@",[tempStr substringFromIndex:2]];
}
return balanceStr;
}