becomeFirstResponder:automáticamente, desplácese hasta el UIControl que se convierte en el primer respondedor
-
15-11-2019 - |
Pregunta
Tengo un agrupados UITableViewController
con una sección y el número de filas.Cada cell
consta de dos elementos:un UILabel
con una descripción y un UITextField
para una entrada.Una forma, diría yo.
En la parte inferior hay un botón de "Siguiente", vaya a la siguiente vista.Pero antes de eso, yo validar la UITextField
's:si el usuario no ha llenado un campo, este campo debe obtener el foco, por lo que el usuario ve que necesita para entrar en algo.He probado con esto:
[inputField becomeFirstResponder];
Recuerde que el botón es presionado en la parte inferior de mi punto de vista e imaginar que la UITextField
es en la parte superior.En esta situación, el campo no obtener la atención debido a que es demasiado lejos.Ahora, cuando me desplazo lentamente, y el campo se vuelve visible, el campo se convierte en la primera respuesta y se pone el cursor :-) Conclusión:El becomeFirstResponder
funcionó, pero no exactamente lo que yo quería.No quiero para desplazarse hacia arriba con el dedo, el campo debe obtener el foco y visible automáticamente.
Hay alguna forma de "saltar" directamente a mi campo?El uso de una alternativa a la becomeFirstResponder
?Desplácese a mi campo de forma automática?
Gracias por su ayuda!
Solución
Si usted sabe que el índice de la celda con el UITextField quieres editar, usar
NSIndexPath* indexPath = [[NSIndexPath indexPathWithIndex:your_section_index] indexPathByAddingIndex:your_cell_index];
[tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES]
antes de llamar becomeFirstResponder
.
Si la celda está fuera de la pantalla, becomeFirstResponder puede fallar para algunas versiones de iOS.Además, algunas versiones llevará a cabo adicionales de desplazamiento en el formato tableview en algunas situaciones (por ejemplo,si Apple código determina que el respondedor todavía estaría fuera de la pantalla sin más desplazamiento).Para evitar estos problemas, puede que tenga que llamar a convertirse en la primera respuesta después de que el desplazamiento de la animación es completa.
Otros consejos
Me gustaría el mismo problema. es debido a la UIAnimation que se producen para las dos tareas simultáneamente.Así, mientras que la UIAnimation para scrollToRowAtIndexPath ignora la becomeFirstResponder .
La solución podría ser desactivar el efecto de Animación de uno de O otro uso de la performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:1.0f];
.