2010-03-01 18 views
12

¿Cómo desplazaría un UITableView a una posición específica con una animación?iPhone SDK - ¿Cómo desplazar un UITableView programáticamente con animación?

Actualmente estoy usando el código para saltar a una posición:

//tableController -> viewDidLoad 
[self.tableView reloadData]; 
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:0]; 
[self.tableView scrollToRowAtIndexPath:indexPath 
         atScrollPosition:UITableViewScrollPositionTop 
           animated:YES]; 

El problema con este código, es decir, que la tabla salta a la derecha a la posición correcta y sin ningún tipo de animación. ¿Hay alguna forma de habilitar la animación o establecer la duración?

Gracias por cualquier ayuda.

Respuesta

0

tengo dos sugerencias para que usted pueda investigar:

  1. ¿Está ejecutando la aplicación en el simulador o el propio iPhone? He notado que algunas animaciones se comportan de manera diferente en el simulador.

  2. ¿Es posible que esté llamando a scrollToRowAtIndexPath: atScrollPosition: animado dos veces en rápida sucesión? Esto puede 'confundir' la animación. Debería llamar a esta función solo una vez mientras procesa un evento dado.

+0

Gracias por su respuesta. Estoy ejecutando el código en el dispositivo y llamando a este código en el método viewDidLoad. – dan

+0

Puede ser que, por alguna razón, no se pueda iniciar una animación desde viewDidLoad porque es parte de la inicialización de la vista. No estoy diciendo que sé exactamente por qué sería eso, pero parece plausible. Intente programar un evento con performSelector de NSRunLoop y haga su desplazamiento cuando se llame. – richb

5

Intente comentar la llamada reloadData. Si entiendo tu pregunta correctamente y estás en viewDidLoad, no deberías necesitar llamarla de todos modos.

Además, si acaba de terminar de presionar el controlador de visualización, no obtendrá un desplazamiento animado. Tendrás que insertar un retraso (he encontrado que un cuarto de segundo funciona bien) entre el momento en que se invocó viewDidLoad y cuando comienza tu animación.

23

Funciona bien para mí:

-(void) viewDidAppear:(BOOL)animated{ 
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:n inSection:0]; 
    [self.tableView scrollToRowAtIndexPath:indexPath 
        atScrollPosition:UITableViewScrollPositionTop 
          animated:YES]; 

} 

para asegurarse de que esto se llama una sola vez, se puede hacer una verificación de la siguiente manera:

if(!isInitialized){ 
    isInitialized = YES; 
    .... 
} 
0

Sé que es tal vez demasiado tarde, pero tal vez es ayuda para otros, ahora puede desplazarse por una tabla solo con [tableView scrollsToTop].

Cuestiones relacionadas