Vorrei che il mio UITableView si comportasse come la tabella nell'editor Contatti, cioè l'utente dovrebbe premere Modifica e una riga "aggiungi nuova categoria" dovrebbe apparire nella parte inferiore di ogni sezione.Utilizzo di righe di inserimento in un UITableView
Sto usando il codice qui sotto per fare questo, ma il problema è che non c'è transizione graduale come c'è in Contatti. Invece, la nuova riga appare all'improvviso. Come posso ottenere l'animazione?
Inoltre, come faccio a rispondere ai clic sulla riga "aggiungi nuova categoria"? La riga non è selezionabile nella mia attuale implementazione.
Devo ricaricare i dati quando l'utente inizia a modificare? Lo sto facendo perché altrimenti le righe di inserimento non vengono mai disegnate.
Grazie.
- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
[super setEditing:editing animated:animated];
[self.tableView setEditing:editing animated:animated];
[tableView reloadData];
}
- (NSInteger)tableView:(UITableView *)_tableView numberOfRowsInSection:(NSInteger)section {
// ...
if(self.tableView.editing)
return 1 + rowCount;
}
- (UITableViewCell *)tableView:(UITableView *)_tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// .....
NSArray* items = ...;
if(indexPath.row >= [items count]) {
cell.textLabel.text = @"add new category";
}
// ...
return cell;
}
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
NSArray* items = ...;
if(indexPath.row == [items count])
return UITableViewCellEditingStyleInsert;
return UITableViewCellEditingStyleDelete;
}
Questo è stato molto utile (insieme con la risposta, di seguito). Solo una incoerenza minore: il confronto con il conteggio delle righe in 'tableView: cellForRowAtIndexPath:' utilizza '> =' mentre quello in 'tableView: editingStyleForRowAtIndexPath:' utilizza '=='. Non è un grosso problema, ma dovrebbe essere coerente tra loro. '> =' coprirebbe ogni accidentale aggiunta doppia della riga di inserimento, mentre '==' sarebbe di aiuto lanciando un'eccezione per qualsiasi errore di codice che potrebbe portare a quella situazione. –