J'ai un UITableViewController
qui a deux sections. La première section montre une seule cellule avec un texte centré, en disant Add a new Slide
. La deuxième section montre les diapositives actuelles.Mon UITable réutilise des cellules quand il ne devrait pas!
Lorsqu'un utilisateur appuie sur la cellule Add a new slide
, un nouveau UITableVeiwController
est inséré dans la pile pour afficher un éditeur. Si l'utilisateur enregistre la nouvelle diapositive (en appuyant sur Enregistrer), la cellule est ajoutée à la source de données et l'éditeur est retiré de la pile.
J'ai deux problèmes:
Lorsque l'éditeur est sauté, si une cellule a été supprimée avant
Add a new slide
a été taraudés, l'ancienne cellule apparaît au lieu de la nouvelle. Popping leUITableViewController
(en appuyant sur le bouton de retour généré automatiquement) résout cela, mais je voudrais que cela n'arrive pas du tout. (À l'origine, popping la table ne met pas à jour après popping l'éditeur, alors j'ai ajouté[self.tableView reloadData];
la méthodeviewDidAppear
.)Après un certain nombre de diapositives, la dernière diapositive sur la liste devient la cellule
Add a new slide
. Je sais que les données sont entrées correctement car une autre partie de l'application, qui utilise la même source de données, se met correctement à jour. La table prend en charge l'édition dans la deuxième section, et quand vous permutez l'ordre des cellules, elle se comporte correctement dans les coulisses, mais la mauvaise cellule est toujours là.
Que pourrait-il se passer?
est ici une partie de mon code:
Notez que je préparais pour poster mon code, j'ai remarqué un décalage des accolades. La vérification decell==nil
semble englober la deuxième partie du code qui détermine le contenu des cellules. Cela corrige l'étiquette des cellules dans la deuxième section de la table, mais le style est toujours faux. J'ai depuis corrigé le code, mais l'original est posté ici.
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
if ([indexPath section] == 0) {
cell = [[[MBTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}else if([indexPath section] == 1){
cell = [[[MBTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}
if ([indexPath section] == 0) {
[cell.textLabel setTextAlignment:UITextAlignmentCenter];
[cell.textLabel setText:@"Add a New Slide"];
}else if([indexPath section] == 1){
NSArray *storedViewsInfo = [[NSArray alloc] initWithArray:[kSettings arrayForKey:@"views"]];
if ([[[storedViewsInfo objectAtIndex:[indexPath row]] valueForKey:@"type"] isEqualToString:@"announcement"]) {
[cell.detailTextLabel setText:@"Custom Announcement"];
[cell.textLabel setText:[[[storedViewsInfo objectAtIndex:[indexPath row]] valueForKey:@"info"] valueForKey:@"text"]];
}
[storedViewsInfo release];
[cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
}
}
return cell;
}
pouvez-vous poster '- (void) tableView: (UITableView *) tableViewDisplayCell: (UITableViewCell *) cellule pourRowAtIndexPath: (NSIndexPath *) indexPath' –