钱的限制输入条件
1.可以输入小数点后N位
2.第一位是0,第二位不能是0
3.不能以.开始
方法一
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)string
{
NSCharacterSet *characterSet;
NSUInteger dotLocation = [textField.text rangeOfString:@"."].location;
if ([textField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]].length == 0 && [string isEqualToString:@"."]) {
textField.text = @"0.";
return NO;
}
if (dotLocation == NSNotFound && range.location != 0) {
NSMutableCharacterSet *mutableCharacterSet = [NSMutableCharacterSet decimalDigitCharacterSet];
[mutableCharacterSet addCharactersInString:@"."];
characterSet = [mutableCharacterSet invertedSet];
}else {
characterSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
}
NSString *filtered = [[string componentsSeparatedByCharactersInSet:characterSet] componentsJoinedByString:@""];
BOOL basicTest = [string isEqualToString:filtered];
if(!basicTest) {
return NO;
}
if (dotLocation != NSNotFound && range.location > dotLocation + 2) {
return NO;
}
return YES;
}
方法二
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)string
{
NSMutableString * futureString = [NSMutableString stringWithString:textField.text];
[futureString insertString:string atIndex:range.location];
NSInteger flag=0;
const NSInteger limited = 1;
for (int i = futureString.length-1; i>=0; i--) {
if([futureString characterAtIndex:i] == '.') {
if (flag > limited) {
return NO;
}
break;
}
flag++;
}
return YES;
}
方法三
代码忘了在哪看见的了,之前随手收藏的,提供一个思路吧,observeMoney是UITextFiled category中的一个方法
- (void)observeMoney {
if (!self.isMoney) {
return;
}
NSString *allText = self.text;
NSString *newText= allText;
if (self.correctText) {
NSRange oldTextRange = [allText rangeOfString:self.correctText];
newText = [allText substringFromIndex:oldTextRange.length];
}
NSCharacterSet *set = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789."]invertedSet];
NSString *filtered = [[newText componentsSeparatedByCharactersInSet:set] componentsJoinedByString:@""];
if (filtered.length == 0) {
if ([newText isEqualToString:@""]) {//inputed backSpace
self.correctText = newText;
}
self.text = self.correctText;
return;
}
if ([self.correctText rangeOfString:@"."].length) {
if ([newText isEqualToString:@"."]) {//only one '.'
self.text = self.correctText;
return;
}
//2 charactors limited after '.'
NSArray *array = [self.correctText componentsSeparatedByString:@"."];
if (array.count == 2) {
if ([array[1] length] >= 2) {
NSArray *newStringArray = [newText componentsSeparatedByString:@"."];
if (newStringArray.count == 2 && [newStringArray[1] length] == 1) {//inputed backSpace
self.correctText= newText;
}
self.text = self.correctText;
return;
}
}
} else if (self.correctText.length == 1) {
if ([newText isEqualToString:@"0"] && [self.correctText isEqualToString:@"0"]) {
self.text = self.correctText;
return;
}
}
if (self.correctText.length == 0 && [newText isEqualToString:@"."]) {//"."->"0."
self.text
= self.correctText
= @"0.";
return;
}
if (self.correctText.length == 1 && [self.correctText isEqualToString:@"0"]) {
if (![newText isEqualToString:@"."] && [newText intValue] > 0) {//'0'->other numbers
self.text
= self.correctText
= newText;
return;
}
}
self.correctText = allText;
}
转载请注明:天狐博客 » iOS开发之TextField钱以及小数点的实时限制输入