How can I limit the number of decimal points in a UITextField?

user1282180 picture user1282180 · May 1, 2012 · Viewed 20.7k times · Source

I have a UITextField that when clicked brings up a number pad with a decimal point in the bottom left. I am trying to limit the field so that a user can only place 1 decimal mark

e.g.
2.5 OK
2..5 NOT OK

Answer

lnafziger picture lnafziger · May 2, 2012

Implement the shouldChangeCharactersInRange method like this:

// Only allow one decimal point
// Example assumes ARC - Implement proper memory management if not using.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{
    NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
    NSArray  *arrayOfString = [newString componentsSeparatedByString:@"."];

    if ([arrayOfString count] > 2 ) 
        return NO;

    return YES;
}

This creates an array of strings split by the decimal point, so if there is more than one decimal point we will have at least 3 elements in the array.