Question

I have two UITextFields: usernameField & passwordField. For both fields I'm trying to implement the code below to NOT allow the user to type in any white space (use spacebar) and to also limit maximum length for each textfield. The code for white spaces works fine, but Max Length fails.

//Addressing White space and length in the form
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

NSString *resultingString = [textField.text stringByReplacingCharactersInRange: range withString: string];
NSCharacterSet *whitespaceSet = [NSCharacterSet whitespaceCharacterSet];
if  ([resultingString rangeOfCharacterFromSet:whitespaceSet].location == NSNotFound)      {
    return YES;
}  else  {
    self.title.text = @"No Spaces Allowed";
    self.title.textColor = [UIColor yellowColor];
    return NO;
}


if (textField == self.usernameField)
{
    NSInteger MAXLENGTH = 15;

    NSUInteger oldLength = [textField.text length];
    NSUInteger replacementLength = [string length];
    NSUInteger rangeLength = range.length;

    NSUInteger newLength = oldLength - rangeLength + replacementLength;

    BOOL returnKey = [string rangeOfString: @"\n"].location != NSNotFound;

    return newLength <= MAXLENGTH || returnKey;

if (textField == self.passwordField)
    {
        NSInteger MAXLENGTH = 10;

        NSUInteger oldLength = [textField.text length];
        NSUInteger replacementLength = [string length];
        NSUInteger rangeLength = range.length;

        NSUInteger newLength = oldLength - rangeLength + replacementLength;

        BOOL returnKey = [string rangeOfString: @"\n"].location != NSNotFound;
        return newLength <= MAXLENGTH || returnKey;   
    }
}
}
Was it helpful?

Solution

For allowing Maximum characters and rejecting space

Implement shouldChangeCharactersInRange delegate

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    BOOL _isAllowed = YES;

    NSString *tempString = [[textField.text stringByReplacingCharactersInRange:range withString:string] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];


    if ([self.yourTextFeildName.text isEqualToString:tempString] || [tempString length] > 5)
    {
        _isAllowed =  NO;
    }

    return   _isAllowed;
}

For Minimum characters

Implement textFieldDidEndEditing delegate

- (void)textFieldDidEndEditing:(UITextField *)textField
{
   if ([textField.text length] < 5)
   {
         //text field length is less than 5.
   }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top