UITextField: agregue un carácter / s después de ingresar el primer carácter mientras escribe

Tengo un UITextField que contendrá el valor de altura. Quiero formatear el valor del campo mientras el usuario escribe en UITextField. Por ejemplo, si quiero ingresar el valor como "5 pies 10", el flujo será:

1. Enter 5 2. " ft " is appended immediately after I type 5 with leading & trailing space. 

Mi código se ve así:

 -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if ( [string isEqualToString:@""] ) return YES; // currHeight Formatting if ( textField == currHeight ) { if (currHeight.text.length == 1) { currHeight.text = [NSString stringWithFormat:@"%@ ft ", currHeight.text]; } } return YES; } 

Estoy atrapado en el punto en el que entro 5 no pasa nada. Tengo que tocar cualquier button para que aparezca el "pie".

¿Puedo hacer esto sin tocar nada?

-se debe llamar a ChangeCharactersInRange antes de que se produzca el cambio en el campo de text, por lo que la longitud sigue siendo 0 (consulte Usar `textField: shouldChangeCharactersInRange:`, ¿cómo obtengo el text incluyendo el carácter tipeado actual? ). Prueba esto:

 - (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString: (NSString*) string { if (textField == currHeight) { NSString *text = [textField.text stringByReplacingCharactersInRange:range withString: string]; if (text.length == 1) { //or probably better, check if int textField.text = [NSString stringWithFormat: @"%@ ft ", text]; return NO; } } return YES; } 

Cuando se llama a esta function, currHeight.text todavía tiene longitud 0. El text solo se actualiza a 5 después de devolver YES.

La forma de hacer lo que quiere hacer es probar si currHeight.text.length es 0, string.length es 1 y el primer carácter de la cadena es numérico.