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;
}