For some reason, I couldn’t find this anywhere else on the web, so here it is. To set a maximum character count on a UITextField, simply implement this UITextFieldDelegate method:
-(BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { int maxLength = 64; //you only need this check if you have more than one textfield on the view: if (textField == self.nameTextField) { if (textField.text.length - range.length + string.length > maxLength) { if (string.length > 1) { // only show popup if cut-and-pasting: NSString *message = [NSString stringWithFormat:@"That name is too long. Keep it under %d characters.", maxLength]; UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Oops!" message:message delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; } return NO; } } return YES; }
Remember, this is a delegate method, so you have to specify that your UIViewController implements it:
@interface SomeViewController () <UITextFieldDelegate>
…and you have to set the delegate for the textfield:
self.nameTextField.delegate = self;
This can also be done for a UITextView with its delegate method:
-(BOOL) textView:(UITextField *)textView shouldChangeTextInRange:(NSRange)range replacementString:(NSString *)text { int maxLength = 64; //you only need this check if you have more than one textview on the view: if (textView == self.descriptionTextView) { if (textView.text.length - range.length + text.length > maxLength) { if (text.length > 1) { // only show popup if cut-and-pasting: NSString *message = [NSString stringWithFormat:@"That description is too long. Keep it under %d characters.", maxLength]; UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Oops!" message:message delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; } return NO; } } return YES; }