Skip to content

Instantly share code, notes, and snippets.

@ondrejmirtes
Created October 23, 2012 20:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ondrejmirtes/3941235 to your computer and use it in GitHub Desktop.
Save ondrejmirtes/3941235 to your computer and use it in GitHub Desktop.
textField: shouldChangeCharactersInRange: for decimal keyboard
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (textField == self.amountInput) {
if (string.length == 0) {
return YES; // backspace
}
NSNumberFormatter* numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setFormatterBehavior: NSNumberFormatterBehavior10_4];
[numberFormatter setNumberStyle: NSNumberFormatterDecimalStyle];
NSString* decimalSeparator = [[[numberFormatter stringFromNumber:@0.1] substringFromIndex:1] substringToIndex:1];
NSString* allowedCharacters = [decimalSeparator stringByAppendingString:@"0123456789"];
unichar decimalSeparatorChar = [decimalSeparator characterAtIndex:0];
NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:allowedCharacters];
for (int i = 0; i < [string length]; i++) {
unichar c = [string characterAtIndex:i];
if (textField.text.length == 0 || [textField.text containsString:decimalSeparator]) {
if (c == decimalSeparatorChar) {
return NO;
}
}
if (textField.text.length > 0) {
NSString* zeros = [@"" stringByPaddingToLength:textField.text.length withString: @"0" startingAtIndex:0];
if (c == '0' && [textField.text isEqualToString:zeros]) {
return NO;
}
}
if ([myCharSet characterIsMember:c]) {
return YES;
}
}
return NO;
}
return YES;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment