Cómo limitar caracteres en UITextField

Tengo un UITextField con las siguientes restricciones: los caracteres solo pueden ser numbers, como en el método a continuación. También quiero limitar la cantidad de caracteres máximos a 3 dígitos. ¿Cómo puedo modificar mi método para hacerlo?

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSCharacterSet *aCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"]; for (int i = 0; i < [string length]; i++) { unichar aCharacter = [string characterAtIndex:i]; if ([aCharacterSet characterIsMember:aCharacter]) { return YES; } } NSUInteger newLength = self.textField.text.length + string.length - range.length; return (newLength > 3) ? NO : YES; } 

o limitar el uso del campo de text debajo del código.

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string]; return !([newString length] > 3); } 

Su código está cerca. Tratar:

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSCharacterSet *aCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"]; for (int i = 0; i < [string length]; i++) { unichar aCharacter = [string characterAtIndex:i]; if (![aCharacterSet characterIsMember:aCharacter]) { return NO; } } NSUInteger newLength = self.textField.text.length + string.length - range.length; return (newLength > 3) ? NO : YES; } 

Puede agregar un observador a UITextFieldTextDidChangeNotification

// agrega esta línea en viewDidLoad

 [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(limitTextField) name:UITextFieldTextDidChangeNotification object:nil]; //dealloc add this [[NSNotificationCenter defaultCenter]removeObserver:self name:UITextFieldTextDidChangeNotification object:nil]; 

// método para limitar los caracteres del campo de text

 -(void)limitTextField { textField.text = [textField.text substringToIndex:3]; } 

// o bien configure el delegado del campo de text y use esto

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if([textField.text length]<=3) return YES; else return NO; } 

y establezca el keyBoardType del keyBoardType de text como UIKeyboardTypeNumberPad para get solo numbers. No he probado o comstackdo el código, solo escribí la lógica. Espero eso ayude 🙂

Configuración del límite máximo de caracteres y validation numérica en UITextField

Establecer el límite máximo de caracteres en UITextField : no podemos establecer directamente la longitud máxima en UITextField porque su class no tiene una propiedad de longitud máxima, pero se puede lograr utilizando el siguiente método de delegado de campo de text.

 #define MAX_LENGTH 20 – (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSUInteger newLength = [textField.text length] + [string length] – range.length; if(newLength > MAX_LENGTH){ return NO; } else{ return YES; } } 

Antes de que el campo de text cambie, UITextField le pregunta al delegado si debe cambiar el text especificado. El campo de text no ha cambiado en este punto, por lo que tomamos su longitud actual y la longitud de la cadena que estamos insertando, less la longitud del range. Si este valor es demasiado largo (más de 20 caracteres en este ejemplo), devuelva NO para prohibir el cambio.

> Validación numérica en UITextField

 #define NUMBERS_ONLY 0123456789 – (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)string { if([textField isEqual:txtPhone]) { NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:NUMBERS_ONLY] invertedSet]; NSString *filtenetworkingstring = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@””]; return ([string isEqualToString:filtenetworkingstring]); } return TRUE; } 

Prueba esto:

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSCharacterSet *aCharacterSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet]; NSString *filtenetworking = [[string componentsSeparatedByCharactersInSet:aCharacterSet] componentsJoinedByString:@""]; if ((textField.text.length >2) && (!(string.length == 0))) return NO; else return [string isEqualToString:filtenetworking]; } 

declarar de esta manera

  #define MAX_LENGTH_FULLNAME 3 #pragma mark - TextField Delegate method - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ if([string length]==0){ return YES; } NSUInteger newLength = [textField.text length] + [string length] - range.length; if ([string isEqualToString:@"\n"]) { [self.txtAnswer resignFirstResponder]; return NO; } if (textField == self.txtFName){ /* for backspace */ if([string length]==0){ return YES; } if (newLength > MAX_LENGTH_FULLNAME) { if([string length] > MAX_LENGTH_FULLNAME){ textField.text = [string substringToIndex:MAX_LENGTH_FULLNAME]; } return NO; } NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:@"1234567890"]; for (int i = 0; i < [string length]; i++) { unichar c = [string characterAtIndex:i]; if ([myCharSet characterIsMember:c]) { return YES; } } return NO; } return YES; } 

para permitir solo numbers, también puede definir de esta manera

 [textField setKeyboardType:UIKeyboardTypeNumberPad]; 

Esto seguramente ayudará.

Esta es una respuesta duplicada: vaya a comprobar esta respuesta Establezca la longitud máxima de caracteres de un UITextField