2012-10-05 10 views
9

tener lo siguiente:UITextFieldTextDidChangeNotification no consigue un llamado a iOS6 ipad3

// watch the fields 
[[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(handleTextChange:) 
               name:UITextFieldTextDidChangeNotification 
              object:textField1]; 

y luego:

-(void) handleTextChange:(NSNotification *)notification { 
    ... 
} 

Tener un punto de interrupción en -handleTextChange:, pero no ser despedido. textField está conectado en el Interface Builder.


Obras en simulador de iOS 6 iPhone/iPad, iPad2 en iOS5.1, pero no en iOS6 iPad3.

Respuesta

7

así que lo descubrí. Lo que cambió en IOS6 SDK es que si cambia el texto del campo de texto mediante programación, no envía una notificación. Tengo un teclado personalizado en todas esas vistas. cuando toco una tecla, cambia el valor del texto del campo de texto agregando lo que escribí. En ios 5, enviaría una notificación "textdidchange", pero no en ios6.

+2

donde puede encontrar algo similar que funcione en ios6? – Marco

0

En mi ipad3 & iOS6.0 notificación UITextFieldTextDidChangeNotification funciona bien. poner

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(handleTextChange:) 
              name:UITextFieldTextDidChangeNotification 
             object:textField1]; 

en su viewDidLoad

7

Irena es correcta, UITextFieldTextDidChangeNotification no se dispara cuando el campo de texto se establece mediante programación. Sin embargo, me gustaría aclarar que no tiene nada que ver con iOS6, tiene que ver con el iOS 6 SDK. Si compila con iOS 5.1 SDK, la notificación UITextFieldTextDidChangeNotification se activará cada vez que se cambie el campo de texto, mediante programación o de otro modo, incluso si se ejecuta en un dispositivo iOS 6.

+0

¿Por casualidad informó esto como un error para Apple? – Shaolo

0

Como solución temporal hasta que Apple corrige esto, se puede utilizar el siguiente ejemplo de código:

//view is a UITextField 
NSString *temp = ((UITextField*)view).text; 
((UITextField*)view).text = @""; 
[((UITextField*)view) insertText:[NSString stringWithFormat:@"%@%@", @"-", temp]]; 

Ese código seguirá disparando el evento.

Esto también funciona:

[((UITextField*)view) sendActionsForControlEvents:UIControlEventEditingChanged]; 
1

Mi caso de uso era algo especial, yo estaba creando HH: MM: duración SS UITextField con caracteres introducidos desde la parte trasera, por lo tanto, atrapando caracteres en - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string y luego regresar return (NO); prohibir auto-actualización de UITextField ... pre-iOS6, llamó a la notificación, después de iOS6, simplemente llamo al [[NSNotificationCenter defaultCenter] postNotificationName:UITextFieldTextDidChangeNotification object:self.textField]; justo antes de la declaración return.

Cuestiones relacionadas