Использование -textField:shouldChangeCharactersInRange:replacementString:
, вероятно, является плохим решением, поскольку оно срабатывает до обновления текстового поля.Этот метод, вероятно, следует использовать, когда вы хотите изменить текст текстового поля, прежде чем клавиатура автоматически его обновит.Здесь вы, вероятно, захотите просто использовать сопряжение целевого действия при редактировании изменений значения:
[textField addTarget:self action:@selector(checkTextField:) forControlEvents:UIControlEventEditingChanged];
Затем, в - (void)checkTextField:(id)sender
, попробуйте это:
UITextField *textField = (UITextField *)sender;
if ([textField.text length] == 8) {
textField.textColor = [UIColor greenColor]; // No cargo-culting please, this color is very ugly...
} else {
textField.textColor = [UIColor blackColor];
/* Must be done in case the user deletes a key after adding 8 digits,
or adds a ninth digit */
}