No se puede usar la tecla de retroceso para eliminar un carácter de un campo de text en iOS

Estoy implementando el siguiente método de delegado para UITextField:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSString *integerPart = [textField.text componentsSeparatedByString:@"."][0]; NSString *decimalPart = [textField.text componentsSeparatedByString:@"."][1]; if ([integerPart length] > 8 || [decimalPart length] > 5) { return NO;//this clause is always called. } ... } 

y estoy tratando de limitar el número de dígitos ingresados ​​en el campo de text a 6. El problema que tengo es que si ingreso un número con 6 dígitos después del decimal y luego bash presionar la tecla de retroceso en mi dispositivo para eliminar los numbers , o necesito hacer una corrección dentro del número, no puedo hacerlo. La razón es que cada vez que se trata de este punto en mi código, se da count de que ya he ingresado 6 dígitos después del decimal (que es correcto) y, por lo tanto, anula mi input de tecla de retroceso. ¿Cómo puedo mantener este límite de 6 dígitos después del lugar decimal, Y permitir la edición del número después de alcanzar este límite?

Gracias de antemano a todos los que responden.

No he tenido la oportunidad de probar esto, pero según esta respuesta , la cadena debe estar vacía cuando se ingresa un retroceso (lo que tiene sentido). Entonces deberías poder hacer esto.

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { // Always allow a backspace if ([string isEqualToString:@""]) { return YES; } // Otherwise check lengths NSString *integerPart = [textField.text componentsSeparatedByString:@"."][0]; NSString *decimalPart = [textField.text componentsSeparatedByString:@"."][1]; if ([integerPart length] > 8 || [decimalPart length] > 5) { return NO;//this clause is always called. } return YES; } 
  //Construct the new string with new input NSString* newText = [textField.text stringByReplacingCharactersInRange:range withString:text]; NSString *integerPart = [newText componentsSeparatedByString:@"."][0]; NSString *decimalPart = [newText componentsSeparatedByString:@"."][1]; if ([integerPart length] > 8 || [decimalPart length] > 5) { return NO;//this clause is always called. } 

Creo que esto es lo que necesitas. Esto buildá la nueva cadena que se mostrará en el campo de text y puede evaluar esa cadena.