2012-01-09 10 views
7

Sto apportando modifiche a una tabellaView utilizzando un blocco beginUpdates/endUpdates. In tutto il modo ho bisogno di aggiornare un'ombra esterna in modo che rifletta la composizione attuale di tableView.UITableView startUpdates/endUpdates callback

Ho provato a configurare KVO per TableView contentSize ma è chiamato solo su endUpdates, una volta terminata l'animazione. Quello che voglio è che venga chiamato ogni volta contentSize modifiche (anche se è solo di un pixel). C'è un modo per raggiungere questo obiettivo?

risposta

0

Mi dispiace dirlo, non penso che tu possa farlo. Quando si apportano modifiche alla tabella dopo che è stato chiamato , le modifiche vengono animate come una singola animazione dopo endUpdates. Non ci sono richiami di animazione durante queste animazioni. Non ho provato questo, quindi non so se funzionerebbe bene per questo, ma potresti provare ad annidare beginUpdates e endUpdates e ad aggiornare l'ombra dopo ogni endUpdates.

+2

Cordiali saluti: Invocazioni di beginUpdates e endUpdates possono essere nidificate. Se non si effettuano le chiamate di inserimento, cancellazione e selezione all'interno di questo blocco, gli attributi della tabella come il conteggio delle righe potrebbero non essere più validi. –

+0

Hai un esempio di come dovrebbero essere utilizzate le chiamate annidate? – Rivera

24

Che dire di questo?

[CATransaction begin]; 

[CATransaction setCompletionBlock:^{ 
    // animation has finished 
}]; 

[tableView beginUpdates]; 
// do some work 
[tableView endUpdates]; 

[CATransaction commit]; 
+0

che ha fatto per me! Grazie! – horseshoe7

+1

Eeeek !!! che funziona quasi ma c'è un ritardo tra il tableview che termina gli aggiornamenti e il blocco di completamento in esecuzione. Per ora lo userò. Grazie. – SpaceDog

1

Il metodo di Rudolf non ha funzionato per me in modo uniforme come previsto. Nel mio caso stavo selezionando una riga su UITableView usando questo, e il metodo di Rudolf stava facendo sì che la tabella facesse due animazioni con un piccolo blocco: l'animazione dentro beginUpdates/endUpdates, un po 'fermo e l'animazione sul blocco di completamento.

[tableView selectRowAtIndexPath:indexPath 
         animated:YES 
        scrollPosition:scrollPosition]; 

che mi ha ispirato per creare questo codice ... e questo sta lavorando senza soluzione di continuità:

[UIView animateWithDuration:0.0 animations:^{ 
    [tableView beginUpdates]; 
    // do something to the table 
    [tableView endUpdates]; 
} completion:^(BOOL finished) { 
    // Code to run when table updates are complete. 
}];