2012-04-22 19 views
39

quiero hacer a continuación:UITableView moverse a la celda

Tengo una UITableView que tienen que dispaly palabras (A-Z).

Actualmente, cuando se cargó la vista, tengo una celda que se muestra (y esto es correcto). Primera celda muestra la primera palabra de mis palabras de la matriz.

Objetivo: Quiero moverme a la celda que debe mostrar 10 palabras de mi matriz, pero el problema es que la celda con indexPath.row = 10 no existe (y esto es correcto, porque aún no me desplazo)

¿Cuál es la espera correcta para hacer la transición de 1 a 10 celdas.

Creo que si no uso dequeueReusableCellWithIdentifier para crear mi celda, puedo hacerlo y resolver mi problema, pero me refiero a este problema para la memoria del dispositivo.

En otras palabras Necesito hacer scrollToRowAtIndexPath

Gracias!

Respuesta

81

Tiene usted razón en identificar el método scrollToRowAtIndexPath. Así que todo lo que necesita hacer es crear un IndexPath fresco con la fila que desea mover a, por ejemplo, el índice de fila = 10:

[tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:10 inSection:indexPath.section] 
      atScrollPosition:UITableViewScrollPositionMiddle animated:NO]; 
+0

gracias por la respuesta, pero ¿cómo puedo desplazarme a indexPath que aún no existe? –

+0

Ahora me pregunto si entiendo su pregunta original. Según tengo entendido, su tabla puede tener muchas celdas, por ejemplo, 100, pero solo alrededor de 10 son visibles a la vez. Aunque técnicamente no hay 100 filas reales en la memoria (debido a la reutilización de la celda), todavía está bien desplazarse programáticamente a una fila que aún no está visible. Por ejemplo, fila 50. – arooaroo

+0

gracias de nuevo. ahora he resuelto este problema, pero scrollToRowAtIndexPath con animatio NO aún no funciona. Por lo tanto, si la animación SÍ todo funciona bien. –

4
//For iOS 7 
     [self.TableView reloadData]; 
     NSIndexPath *indexPath = [NSIndexPath indexPathForRow:1 inSection:1]; 
     [TableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES]; 
1

uno puede identificar la fila (en el ejemplo de abajo que es. forRow) que debe hacerse visible y volver a cargar la fila. Al completar eso, puede desplazarse a esa fila.

let moveToIndexPath = NSIndexPath(forRow: forRow, inSection: 0) 
self.tableView.reloadRowsAtIndexPaths([moveToIndexPath], withRowAnimation: .None) 
self.tableView.scrollToRowAtIndexPath(moveToIndexPath, atScrollPosition: atScrollPosition, animated: true) 
Cuestiones relacionadas