Ho un UITableView che presenta alcune impostazioni all'utente. Alcune celle sono nascoste a meno che un UISwitch sia nella posizione "On". Ho il seguente codice:Mostrare e nascondere UITableViewCell con UISwitch arresti anomali troppo veloci
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return switchPush.on ? 6 : 1;
}
// Hooked to the 'Value Changed' action of the switchPush
- (IBAction)togglePush:(id)sender {
NSMutableArray *indexPaths = [NSMutableArray arrayWithCapacity:0];
for(int i = 1; i <= 5; i++) {
[indexPaths addObject:[NSIndexPath indexPathForRow:i inSection:0]];
}
[tableView beginUpdates];
if(switchPush.on) {
[tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationAutomatic];
} else {
[tableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationAutomatic];
}
[tableView endUpdates];
}
Questo funziona come previsto, fino a quando posso passare l'UISwitch due volte in rapida successione (toccando due volte), nel qual caso l'applicazione si blocca con un
Invalid table view update. The application has requested an update to the table view that is inconsistent with the state provided by the data source.
So che è causato dal valore di ritorno errato di numberOfRowsInSection quando l'interruttore ritorna nella sua posizione originale mentre l'animazione della cella è ancora in riproduzione. Ho provato a disabilitare il commutatore e ad agganciare il codice sotto altri gestori di eventi, ma nulla sembra impedire l'arresto anomalo. Usare reloadData invece dell'animazione risolve anche il problema ma preferirei le animazioni carine.
Qualcuno conosce un modo corretto per implementare questo?
Che cos'è un UIToggle? Intendi un 'UISwitch'? – Mundi
Sì, l'ho fatto, ho corretto la domanda. –