2012-02-06 16 views
7

Tengo 20 filas en una vista de tabla, y he diseñado (o digamos redimensionado) UITableView en la mitad de la pantalla (usando IB) y en Media pantalla Estoy mostrando las cosas relacionadas con UITableViewCell en particular. Los detalles de la celda que se mostrarán en la media pantalla se deciden en tiempo de ejecución. Quiero que la celda sea visible mientras carga la vista para decir la última celda.Cómo hacer que una UITableViewCell específica sea visible en la pantalla mientras tenga más filas en UITableView

¿Cómo puedo lograrlo?

Respuesta

11

UITableView clase ofrece:

-(void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath 
      atScrollPosition:(UITableViewScrollPosition)scrollPosition 
        animated:(BOOL)animated; 

que parece ser lo que busca.

El objeto NSIndexPath se puede construir usando:

+(NSIndexPath *)indexPathForRow:(NSInteger)row inSection:(NSInteger)section; 
7

Trate scrollToRowAtIndexPath:atScrollPosition:animated::

NSUInteger indexArray[] = {1,15}; 
NSIndexPath *indexPath = [NSIndexPath indexPathWithIndexes:indexArr length:2]; 
[yourTableView scrollToRowAtIndexPath:indexPath atScrollPosition: UITableViewScrollPositionTop animated:YES]; 
+0

Gracias por la ayuda ..., – Krishna

15

he encontrado la forma más fácil de asegurarse de que una célula entera es visible es pedir al tableview para asegurarse que el rect para la celda es visible:

[tableView scrollRectToVisible:[tableView rectForRowAtIndexPath:indexPath] animated:YES]; 

Un fácil La forma de probarlo es simplemente ponerlo en -(void)tableView:didSelectRowAtIndexPath: - al tocar cualquier celda, se desplazará a su lugar si está parcialmente oculta.

+2

Esto es justo lo que estaba buscando. Sin embargo, una advertencia ... Si tiene alturas de celda dinámicas (por ejemplo, cambios de altura dentro de didSelectRowAtIndexPath), necesitará relleno adicional en la parte inferior de la tabla. –

+0

De hecho, parece funcionar mucho mejor que el método real para desplazarse a una ruta de índice –

1

Swift versión 4 de la respuesta de Nico teWinkel, que funcionó mejor para mí:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     tableView.scrollToRow(at: indexPath, at: .middle, animated: true) //scrolls cell to middle of screen 
} 
Cuestiones relacionadas