2010-06-19 3 views
1

J'ai effectué des recherches sur tout le Web et mon code semble être presque identique à tout ce qui existe, mais je ne parviens pas à modifier mon UITableView pour insérer une ligne. Lorsque je clique sur le bouton d'édition, toutes mes lignes existantes obtiennent le contrôle de suppression, mais je n'obtiens aucune ligne supplémentaire pour l'insertion. Je tire mes cheveux pour ce qui semble être une chose simple. Qu'est-ce que je rate?Impossible d'obtenir le contrôle d'insertion dans UITableView

- (void)setEditing:(BOOL)editing animated:(BOOL)animated { 
    [super setEditing:editing animated:animated]; 
    [categoryTV setEditing: editing animated:animated]; 

    NSIndexPath *ip = [NSIndexPath indexPathForRow:[[appDelegate appCategories] count] inSection:0]; 

    [self.categoryTV beginUpdates]; 
     if (editing) { 
      [categoryTV insertRowsAtIndexPaths:[NSArray arrayWithObject:ip] withRowAnimation:UITableViewRowAnimationLeft]; 
     } else { 
      [categoryTV deleteRowsAtIndexPaths:[NSArray arrayWithObject:ip] withRowAnimation:UITableViewRowAnimationFade];   
     } 
    [self.categoryTV endUpdates]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

... 

    if (indexPath.row >= [[appDelegate appCategories] count]) 
     cell.textLabel.text = NSLocalizedString(@"New Category", @"NewCategoryCellText"); 
    else 
     cell.textLabel.text = [[[appDelegate appCategories] objectAtIndex:indexPath.row] detailValue]; 


    .... 

    return cell; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    if (self.editing) { 
     return [[appDelegate appCategories] count] + 1; 
    } else { 
     return [[appDelegate appCategories] count]; 
    } 
} 

Comme indiqué, j'ai oublié d'inclure ma version de la méthode suggérée, maintenant montrée ci-dessous. Merci.

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (indexPath.row == [[appDelegate appCategories] count]) { 
     return UITableViewCellEditingStyleInsert; 
    } else { 
     return UITableViewCellEditingStyleDelete; 
    } 
} 

Répondre

3

Vous devez mettre en œuvre la méthode de délégué à la suite d'attribuer un style d'édition:

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { 
    return UITableViewCellEditingStyleInsert; 
} 

Il est évident que vous ne revenir que pour la cellule que vous voulez avoir un contrôle d'insertion. Sinon, vous devrez renvoyer UITableViewCellEditingStyleDelete.

+0

Merci. J'ai mis en place une version de la méthode que vous avez suggérée et édité ma question pour inclure ma version. – Shawn

+0

Êtes-vous toujours en train de voir seulement le contrôle de suppression? – rickharrison

+0

Malheureusement, oui. – Shawn

1

J'ai vu un comportement similaire dans mon UITableView, et le problème était que ma méthode canEditRowAtIndexPath a retourné NO pour la ligne de contrôle d'insertion.

1

mis tableview propriété d'édition OUI

- (void)viewDidLoad { 
    ....... 
    self.tableView.editing = YES; //set editing property of tableview 
    ....... 
} 

édition - Une valeur booléenne qui détermine si le point de vue de la table est dans le mode d'édition.

Déclaration

@property (nonatomic, getter = IsEditing) BOOL édition

Discussion

Lorsque la valeur de cette propriété est OUI, l'affichage du tableau est dans l'édition Mode : Les cellules de la table peuvent afficher un contrôle d'insertion ou de suppression sur le côté gauche de chaque cellule et un réordonn rol sur le côté droit , selon la façon dont la cellule est configurée. (Voir Référence de la classe UITableViewCell pour plus de détails.) Si vous tapez sur un contrôle, la table affiche pour appeler la méthode de la source de données tableView:commitEditingStyle:forRowAtIndexPath:. La valeur par défaut est NO.

revenir alors que la cellule dans laquelle vous voulez avoir un contrôle d'insertion

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { 
    return UITableViewCellEditingStyleInsert; 
} 
Questions connexes