#pragma mark - UITextField Delegate
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
// 判斷是否已經(jīng)存在小數(shù)點(diǎn)
if ([string isEqualToString:@"."] && [textField.text stringByReplacingOccurrencesOfString:@" " withString:@""].length == 0) {
textField.text = @"";
return NO;
} else if ([string isEqualToString:@"."] && [textField.text containsString:@"."]) {
return NO;
}
NSMutableString * futureString = [NSMutableString stringWithString:textField.text];
[futureString insertString:string atIndex:range.location];
NSInteger flag=0;
const NSInteger limited = 2; // 小數(shù)點(diǎn) 限制輸入兩位
for (NSInteger i = futureString.length-1; i>=0; i--) {
if ([futureString characterAtIndex:i] == '.') {
if (flag > limited) return NO;
break;
}
flag++;
}
return YES;
}
使用category 方式處理 限制輸入框輸入標(biāo)點(diǎn)符號(hào)后保留后兩位
給輸入添加監(jiān)聽(tīng)付費(fèi)
[self.priceField addTarget:self action:@selector(textFieldEditingChanged:) forControlEvents:UIControlEventEditingChanged];
--------調(diào)用以下 UITextField 中添加的類別方法
/**
*
* 輸入框限制輸入處理保留兩位小數(shù)點(diǎn)方法
*/
- (void)moneyTFDidTextChanged:(NSInteger)numEnob{
if([self.text hasPrefix:@"0"] && self.text.length == 2){//如果用戶第一輸入了0粘昨,那么就不能讓用戶繼續(xù)輸入0~9的數(shù)字了
NSString *subString = [self.text substringFromIndex:1];
if (([subString integerValue] >0 && [subString integerValue] <= 9) || [subString isEqualToString:@"0"]) {
self.text = [self.text substringToIndex:1];
}
}else if (self.text.length > numEnob && ![self.text containsString:@"."]){ //如果輸入不為'.',則限制輸入6位數(shù)
self.text = [self.text substringToIndex:numEnob];
}
if ([self.text containsString:@"."]) {//如果輸入的文本中含有小數(shù)點(diǎn),則進(jìn)入該方法
NSRange range = [self.text rangeOfString:@"."];
if (range.location == 0) {//如果小數(shù)點(diǎn)位置是第一位,則默認(rèn)為0.
self.text = @"0.";
}else{//說(shuō)明小數(shù)點(diǎn)的位置不是第一位
if (self.text.length > 2) {
NSString *subString = [self.text substringFromIndex:range.location + 1];//取出小數(shù)點(diǎn)后面的字符串
subString = [subString stringByReplacingOccurrencesOfString:@"." withString:@""]; //將用戶多輸入的'.'去除
if (subString.length > 2) {//小數(shù)點(diǎn)后面保留2位
subString = [subString substringToIndex:2];
}
if ([self.text hasPrefix:@"0."]) {
self.text = [NSString stringWithFormat:@"0.%@",subString];
}else{
NSString *subString1 = [self.text substringToIndex:range.location];
self.text = [NSString stringWithFormat:@"%@.%@",subString1,subString];//拼接新的字符串
}
}
}
}
}
輸入框只能輸入數(shù)字和小數(shù)點(diǎn)后保留幾位的方法
//輸入框中只能輸入數(shù)字和小數(shù)點(diǎn),且小數(shù)點(diǎn)只能輸入一位,參數(shù)number 可以設(shè)置小數(shù)的位數(shù)调窍,該函數(shù)在-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string調(diào)用;
-(BOOL)isValidAboutInputText:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string decimalNumber:(NSInteger)number{
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 = number; //保留 number位小數(shù)
NSString *tempStr = [textField.text stringByAppendingString:string];
NSUInteger strlen = [tempStr length];
if(pointRange.length > 0 && pointRange.location > 0){ //判斷輸入框內(nèi)是否含有“.”乏悄。
if([string isEqualToString:@"."]){ //當(dāng)輸入框內(nèi)已經(jīng)含有“.”時(shí)氮凝,如果再輸入“.”則被視為無(wú)效。
return NO;
}
if(strlen > 0 && (strlen - pointRange.location) > remain+1){ //當(dāng)輸入框內(nèi)已經(jīng)含有“.”萝映,當(dāng)字符串長(zhǎng)度減去小數(shù)點(diǎn)前面的字符串長(zhǎng)度大于需要要保留的小數(shù)點(diǎn)位數(shù)吴叶,則視當(dāng)次輸入無(wú)效。
return NO;
}
}
NSRange zeroRange = [textField.text rangeOfString:@"0"];
if(zeroRange.length == 1 && zeroRange.location == 0){ //判斷輸入框第一個(gè)字符是否為“0”
if(![string isEqualToString:@"0"] && ![string isEqualToString:@"."] && [textField.text length] == 1){ //當(dāng)輸入框只有一個(gè)字符并且字符為“0”時(shí)序臂,再輸入不為“0”或者“.”的字符時(shí)蚌卤,則將此輸入替換輸入框的這唯一字符。
textField.text = string;
return NO;
}else{
if(pointRange.length == 0 && pointRange.location > 0){ //當(dāng)輸入框第一個(gè)字符為“0”時(shí)奥秆,并且沒(méi)有“.”字符時(shí)逊彭,如果當(dāng)此輸入的字符為“0”,則視當(dāng)此輸入無(wú)效构订。
if([string isEqualToString:@"0"]){
return NO;
}
}
}
}
NSString *buffer;
if ( ![scanner scanCharactersFromSet:numbers intoString:&buffer] && ([string length] != 0) ){
return NO;
}else{
return YES;
}
}