Skip to main content

xcode 4.2.1 - limiting character length in TextField



I have been trying to limit a textField by many codes available out there in the internet but with no luck.





I have added UIViewController<UITextFieldDelegate> in my header file





and textField.delegate = self; in my viewDidLoad





and implemented the following fundtion in my .m file:







- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

{

NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];

return !([newString length] > 5);

}







this stil does not limit my text field. any idea?


Comments

  1. Do it as following as it has been the exact duplicate of this

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSUInteger newLength = [textField.text length] + [string length] - range.length;
    return (newLength > 5) ? NO : YES;
    }

    ReplyDelete
  2. The replacement string is just the 1 character that was pressed, not the whole string so you need to add It to the current textfield.text before counting.
    Your count is probably always 1 (or more if pasting a word)

    ReplyDelete
  3. I implement this in my code and it works:

    This code eliminate all the letters only accept numbers, but like I delete the character, you could delete everything that its over length 5 and it keeps a nice effect that appears and disappears

    - (void)textFieldDidBeginEditing:(UITextField *)textField {
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChanged:) name:UITextFieldTextDidChangeNotification object:textField];
    }


    - (void)textChanged:(NSNotification *)textField {
    NSString *text = [[textField object] text];
    NSString *last = [text substringFromIndex:[text length] -1];
    NSArray *accept = [NSArray arrayWithObjects:@"0", @"1", @"2", @"3", @"4", @"5", @"6", @"7" , @"8", @"9", @".", nil];

    for (int i=0; i<[accept count]; i++) {
    NSLog(@"%@", [accept objectAtIndex:i]);
    if (![last isEqualToString:[accept objectAtIndex:i]]) {
    [[textField object] setText:[text substringToIndex:[text length]-1]];
    }
    }
    }

    ReplyDelete

Post a Comment

Popular posts from this blog

Slow Android emulator

I have a 2.67 GHz Celeron processor, 1.21 GB of RAM on a x86 Windows XP Professional machine. My understanding is that the Android emulator should start fairly quickly on such a machine, but for me it does not. I have followed all instructions in setting up the IDE, SDKs, JDKs and such and have had some success in staring the emulator quickly but is very particulary. How can I, if possible, fix this problem?