Ho creato un UITableview con sezioni selezionabili. Quando si fa clic su di essi,insertRowsAtIndexPaths: con scrollToRowAtIndexPath: le sezioni di UITableView sono nascoste in modo errato
- che "espandono" per rivelare le cellule al loro interno
- i rotoli sezione cliccato per la parte superiore della vista.
ho calcolare tutti i indexpaths per inserire/eliminare le cellule necessarie e poi inserirli con il seguente codice:
[self.tableView beginUpdates];
[self.tableView insertRowsAtIndexPaths:pathsToOpen withRowAnimation:insertAnimation];
[self.tableView deleteRowsAtIndexPaths:pathsToClose withRowAnimation:deleteAnimation];
[self.tableView endUpdates];
[self.tableView scrollToRowAtIndexPath:[pathsToOpen objectAtIndex:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];
C'è solo un problema-sezioni sotto la sezione selezionata sono nascosti. La prima schermata mostra come dovrebbe apparire la vista tabella. La seconda schermata mostra come effettivamente appare.
Se si scorre verso l'alto (in modo che le sezioni nascoste sono fuori campo) e quindi scorrere verso il basso, le sezioni nascoste sono riportati (ancora una volta visibile). La mia ipotesi sul perché ciò stia accadendo è la seguente:
Le animazioni di inserimento/eliminazione si verificano contemporaneamente allo scrollToRowAtIndexPath
e confonde il TableView. Se non avessi fatto le sezioni 4 sarebbe stato disattivato - e quindi il TableView in qualche modo pensa ancora che siano fuori schermo. UITableview nasconde le celle/sezioni che sono offscreen come ottimizzazione. Se chiamo scrollToRowAtIndexPath
con un dispatch_after
con 2 secondi, le sezioni 3 & 4 vengono visualizzate correttamente.
Quindi penso di sapere perché questo sta accadendo, ma non so come risolvere/sovrascrivere l'ottimizzazione di UITableview. In realtà, se implemento scrollViewDidEndScrollingAnimation
e poi aggiungo un punto di interruzione in questa funzione, l'app visualizza correttamente le sezioni 3 & 4 (è così che ho ottenuto la prima schermata). Ma una volta che si continua da questa funzione, le cellule scompaiono.
Il progetto completa può essere scaricata here
Ulteriori dettagli di implementazione: le sezioni sono sezioni UITableView legittimi. Ho aggiunto un tapGestureRecognizer che attiva una chiamata delegata al tableview. Di seguito è incluso l'intero metodo che apre le sezioni.
Penso che sia meglio usare l'MVC fornito da Apple. Tutto quello che devi fare è aggiungere/rimuovere i dati nella tua origine dati e non toccare le righe della vista tabella – divol
Per favore includi un po 'più del tuo progetto nella domanda, piuttosto che aspettarti un download - per esempio, come calcoli i percorsi dell'indice aggiungere/rimuovere e sono le intestazioni della sezione "sezione X" delle cose o sono solo celle? Sarebbe una domanda autonoma migliore se non dipendesse così tanto dal download del tuo progetto. – jrturton
Penso che anche la tua ipotesi sia giusta. Puoi provare a ricaricare le righe con il metodo di delega a scorrimento terminato? – jrturton