2010-01-26 7 views
2

J'ai une vue de table à laquelle j'ajoute dynamiquement des colonnes. Cela doit être fait de cette façon parce que je ne peux pas prédire le nombre de colonnes ou dont j'ai besoin.La case à cocher de la colonne de la table ne sera pas enregistrée. Cliquez sur

Certaines colonnes sont checkboxes mais je ne peux pas cliquer dessus lorsque j'exécute mon application. La colonne et la case à cocher sont définies pour être modifiables mais si je clique sur la case à cocher, la vérification ne sera pas définie. Est-ce que je manque quelque chose?

Mise à jour

Comment je (essayer) définition de l'état sur la case à cocher:

- (void)tableView:(NSTableView *)theTableView 
    setObjectValue:(id)theObject 
    forTableColumn:(NSTableColumn *)theColumn 
       row:(int)rowIndex 
{ 
    if (theTableView == resultsTableView) { 

     if ([[theColumn identifier] isEqualToString:CHCheckBoxColumnIdentifier]) { 

      NSInteger state = [[theColumn dataCell] state]; 
      if (state == NSOnState) { 
       [[theColumn dataCell] setState:NSOffState]; 
      } else { 
      [[theColumn dataCell] setState:NSOnState]; 
      } 

      /* 
      NSLog(@"%@", theObject); 
      NSLog(@"%@", theColumn); 
      NSLog(@"%i", rowIndex); 
      */ 
     } 
    } 
} 

Répondre

2

sont vos colonnes liées à un contrôleur ou utilisez-vous le protocole NSTableDataSource? Je suspecte le dernier mais vous devrez spécifier.

Partant de mon hypothèse: un clic sur une case est traité de la même manière que toute autre chose dans la méthode -tableView:setObjectValue:forTableColumn:row:. Votre objet sera l'état du bouton ...

+0

Ce faisant, mais quand je fais un setState sur NSButtonCell il n'est pas défini, donc j'ai supposé que ce serait la mauvaise façon de le faire. – ruipacheco

+0

Lorsque vous définissez votre état, demandez-vous à la table -reloadData (ou -reloadDataForRowIndexes: columnIndexes: pour être plus précis)? –

+0

Non. Il suffit de définir l'état et c'est tout. Devrais-je demander à la table de rechargerData? Parce que cela rechargerait tout du tableau et je perdrais la case que je viens de cocher. – ruipacheco

Questions connexes