2011-12-12 14 views
12

Obtuve un TextView que se supone que aparece al presionar un botón, y le permite al usuario ingresar texto a través del teclado.Solución de problemas becomeFirstResponder que no muestra el teclado para algunos usuarios

- (IBAction) changeName { 

    changeNameBtn.hidden = YES; 
    backBtn.hidden = YES; 

    usernameLabel.hidden = NO; 
    inputTextField.hidden = NO; 
    [inputTextField becomeFirstResponder]; // to show keyboard 
} 

Esto funciona bien para la mayoría de nosotros.

Pero el teclado no se muestra para algunos de mis probadores, en un lugar geográficamente remoto. ¿Cómo se puede disparar esto? ¿Y cuál podría ser el motivo del diferente comportamiento de nuestros dispositivos? Funciona bien para mí y para todos los demás. Todos usamos los mismos dispositivos (iPod, iOS 4.1 - 5.1).

primero que intenté no funcionó:

supuse que el inputTextField hizo de alguna manera se hace visible en el tiempo, antes de becomeFirstResponder fue despedido, por lo que añade setNeedsDisplay como pensaba que obligaría a una actualización .

[inputTextField setNeedsDisplay]; 
[inputTextField becomeFirstResponder]; 

Segunda cosa que probé no funcionó:

if([inputTextField canBecomeFirstResponder]){ 
    [inputTextField becomeFirstResponder]; 
} 

Tercer cosa que probé es una solución temporal, que el usuario tenga la mala suerte de pulsar el campo:

- (IBAction) inputTextFieldTouch { 
    [inputTextField becomeFirstResponder]; 
} 

Esta solución alternativa funciona, pero debe haber una mejor manera. ¡Por favor, ilumíname acerca de lo que estoy haciendo mal! :) ¿Y cómo abordar problemas como este sin poder duplicarlo yo mismo?

Respuesta

9

La vista de texto no ha terminado de dibujarse cuando intenta convertirlo en el primero en responder.

Puede intentar animar la apariencia y establecer la primera respuesta en el bloque de finalización.

[UIView animateWithDuration:0.0 animations:^{ 
    [view addSubview:textView]; 
} completion:^(BOOL finished){ 
    [textView becomeFirstResponder]; 
}]; 
0

tratar de ver si se puede mostrar el teclado en primer lugar:

if([inputTextField canBecomeFirstResponder]){ 
    [inputTextField becomeFirstResponder]; 
} 
26

me llamaron becomeFirstResponder más tarde por esta línea:

[self.searchBar performSelector:@selector(becomeFirstResponder) 
        withObject:nil 
        afterDelay:0.1f]; 

que trabajó para mí. Espero que esto ayude.

+0

en realidad funciona mejor que la respuesta, que se marca correctamente. –

+0

mejor, ¿cómo, Ilya? – JOG

4

A partir de iOS8, llamando becomeFirstResponder en un UITextView no muestra el teclado para mí en el simulador de iOS, pero lo hace en el dispositivo real. Así que asegúrese de verificarlo con un dispositivo real. Esto no ocurre en iOS7 sin embargo.

+8

¿Ha presionado Cmd + Shift + K para usar el teclado de su computadora? Eso muestra y oculta el teclado del simulador para mí. – chedabob

+0

Todos mis probadores usan dispositivos reales, incluidos aquellos en los que el teclado no se muestra. Como dice la pregunta, "todos usamos los mismos dispositivos (iPod, iOS 4.1 - 5.1)". – JOG

Cuestiones relacionadas