2010-03-01 7 views
12

Come si scorre un UITableView in una posizione specifica con un'animazione?iPhone SDK - Come far scorrere UITableView a livello di programmazione con l'animazione?

Attualmente sto usando questo codice per passare a una posizione:

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

Il problema con questo codice è, che il tavolo salta a destra alla posizione di destra senza alcuna animazione. C'è un modo per abilitare l'animazione o impostare la durata?

Grazie per qualsiasi aiuto.

risposta

0

Ho due suggerimenti per voi di indagare:

  1. State facendo funzionare la vostra applicazione sul simulatore o lo stesso iPhone? Ho notato che alcune animazioni si comportano diversamente nel simulatore.

  2. È possibile che si stia chiamando scrollToRowAtIndexPath: atScrollPosition: animato due volte in rapida successione? Questo può 'confondere' l'animazione. Dovresti chiamare questa funzione solo una volta durante l'elaborazione di un determinato evento.

+0

Grazie per la risposta. Sto eseguendo il codice sul dispositivo e chiamando questo codice nel metodo viewDidLoad. – dan

+0

È possibile che, per qualsiasi motivo, non sia possibile avviare un'animazione da viewDidLoad perché questo fa parte dell'inizializzazione della vista. Non sto dicendo che so perché esattamente sarebbe, ma sembra plausibile. Prova a pianificare un evento con performSelector di NSRunLoop e fai lo scroll quando viene chiamato. – richb

5

Prova a commentare la chiamata reloadData. Se sto capendo correttamente la tua domanda e sei a viewDidLoad, non dovresti chiamarla comunque.

Inoltre, se hai appena finito di premere il controller della vista, non otterrai uno scorrimento animato. Dovrai inserire un ritardo (ho trovato che un quarto di secondo funziona bene) tra il momento in cui è stato chiamato viewDidLoad e quando inizia l'animazione.

23

Funziona bene per me:

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

} 

Per essere sicuri che questo è chiamato solo una volta, è possibile effettuare una verifica del genere:

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

So che è forse troppo tardi, ma forse è di aiuto agli altri, ora puoi scorrere un tavolo solo con [tableView scrollsToTop].

Problemi correlati