2009-09-22 15 views
6

Tengo un UITableViewController en mi aplicación, que se agrega directamente a la jerarquía de vistas. Después de que aparezca la vista, quiero desplazarme a una celda específica. Mi solución sería llamar al código para desplazarse en -[viewDidAppear].¿Corregir el tiempo para llamar a viewDidAppear manualmente?

De acuerdo con documentos de Apple me tienen que llamar al método manual:

Si se añade la vista perteneciente a un controlador de vista a una jerarquía de vistas directamente, el controlador de vista no recibirán este mensaje. Si inserta o agrega una vista a la jerarquía de vista, y tiene un controlador de vista, debe enviar este controlador directamente al mensaje de vista asociado.

La pregunta es: ¿Cuándo es el momento adecuado para llamar de forma manual?

Llamando desde -[viewDidAppear] cables del controlador de vista de los padres a un accidente cuando trato de hacer el desplazamiento porque al parecer, la vista de tabla en realidad no todavía parece y por lo tanto piensa que no tiene secciones para desplazarse hasta.

Respuesta

1

Llamar desde el controlador principal -viewDidAppear suele ser su mejor opción.

Si esto ocasiona problemas si el controlador de vista infantil aún no se ha inicializado completamente, es posible que tenga otro problema. Asegúrese de que su controlador de vista del niño es completamente "listo para la acción" después -viewWillAppear se llama (que también se puede llamar de forma manual desde el -viewWillAppear de los padres)

1

En - [viewDidAppear] en el tableview, llamado de hecho desde el controlador de vista principal - [viewDidAppear], puede llamar a [tableView reloadData], de esta manera se asegura de que tableView esté cargado y listo.

0

Esta es la forma en que llamo manualmente viewWillAppear, viewDidAppear, viewWillDisappear, viewDidDisappear: here

y uno de los controladores de vista me carga esta manera, tiene la siguiente viewWillAppear: (tenga en cuenta que este es viewWillAppear puesto en el punto de que viewDidAppear se llama, su vista es visible para el usuario)

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    [wordListTable reloadData]; 
    [wordListTable scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionMiddle animated:NO]; 
} 
-1

¿cuál es el error de choque que se obtiene cuando la llamaste? es posible que no esté conservando su tabla vista correctamente.

7

Si está utilizando la contención del controlador de vista, no llame directamente al viewWillAppear:. En su lugar, use – beginAppearanceTransition:animated: y – endAppearanceTransition.

Si está implementando un controlador de contenedor personalizado, use este método para decirle al niño que sus vistas están a punto de aparecer o desaparecer. No invoque viewWillAppear :, viewWillDisappear :, viewDidAppear :, o viewDidDisApear: directamente.

Calling addSubview se activará automáticamente si viewWillAppear: y viewDidAppear: de la vista viewController es un controlador de vista del niño, por lo tanto, llamar directamente viewWillAppear: método apariencia vista voluntad activará dos veces.Usando beginAppearanceTransition: animated: and - endAppearanceTransition` suprimirá el comportamiento automático para que solo lo reciba una vez.

Cuestiones relacionadas