Chciałbym, aby mój UITableView zachowywał się jak tabela w edytorze Kontakty, tj. Użytkownik powinien nacisnąć Edytuj, a wiersz "dodaj nową kategorię" powinien pojawić się u dołu każdej sekcji.Używanie wstawiania wierszy w UITableView
Używam do tego poniższego kodu, ale problem polega na tym, że nie ma płynnego przejścia, jak w Kontakty. Zamiast tego nagle pojawia się nowy wiersz. Jak mogę uzyskać animację?
Co należy zrobić, aby odpowiedzieć na kliknięcia wiersza "dodaj nową kategorię"? Wiersz nie jest klikalny w mojej obecnej wersji.
Czy muszę ponownie załadować dane, gdy użytkownik rozpocznie edycję? Robię to, ponieważ w przeciwnym razie wiersze wstawiania nigdy nie zostaną narysowane.
Dzięki.
- (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;
}
To był bardzo pomocny (wraz z odpowiedzią poniżej). Tylko jedna niewielka niespójność - porównanie z liczbą wierszy w 'tableView: cellForRowAtIndexPath:' używa '> =' podczas gdy w 'tableView: editingStyleForRowAtIndexPath:' używa '=='. Nic wielkiego, ale powinna być zgodna między nimi. '> =' obejmuje przypadkowe podwójne dodanie wiersza Insert, a '==' pomogłoby rzucając wyjątek dla wszelkich błędów kodu, które mogłyby doprowadzić do takiej sytuacji. –