Qu'est-ce qui empêcherait un NSTableColumn modifiable d'être modifiable par double-clic ?
-
22-12-2019 - |
Question
j'ai un NSTableView
avec une seule colonne.Cette colonne a "Modifiable" coché dans Interface Builder, mais double-cliquer sur une cellule dans la vue tableau ne fait rien.J'ai confirmé (dans -tableView:viewForTableColumn:row:
en vérifiant [tableColumn isEditable]
) que la colonne du tableau a l'indicateur modifiable défini.Qu'est-ce qui empêcherait la modification de la colonne si isEditable == YES
?
Il a été suggéré d'inclure ma source de données et mon code délégué.Le dataArray
est une propriété qui stocke NSManagedObject
objets de sous-classe. listPopupButton
sélectionne quelle entité afficher dans un NSTableView
qui peut afficher différentes entités, qui n'ont toutes qu'un attribut de nom (comme indiqué par le nameOnlyItems
méthode qui renvoie un tableau de ceux-ci).
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
return [[self dataArray] count];
}
- (NSView *)tableView:(NSTableView *)tableView
viewForTableColumn:(NSTableColumn *)tableColumn
row:(NSInteger)row {
NSTableCellView *cellView;
NSNumber *index = [NSNumber numberWithInteger:[[self listPopupButton] indexOfSelectedItem]];
if ([[self nameOnlyItems] containsObject:index]) {
CVCAbstractEntity *entity = [[self dataArray] objectAtIndex:row];
NSString *name = [entity name];
cellView = [tableView makeViewWithIdentifier:@"nameOnly" owner:self];
[[cellView textField] setStringValue:name];
} else if ([index integerValue] == CVCListPopUpIndexPublishers) {
CVCPublisher *publisher = [[self dataArray] objectAtIndex:row];
NSString *identifier = [tableColumn identifier];
NSString *content;
content = [[publisher valueForKeyPath:identifier] description];
if ([identifier containsString:@"year"] && [content isEqualToString:@"0"]) {
content = @"";
}
cellView = [tableView makeViewWithIdentifier:identifier owner:self];
[[cellView textField] setStringValue:content ? content : @""];
} else if ([index integerValue] == CVCListPopUpIndexSeries) {
CVCSeries *series = [[self dataArray] objectAtIndex:row];
NSString *identifier = [tableColumn identifier];
NSString *content;
content = [[series valueForKeyPath:identifier] description];
if ([identifier containsString:@"year"] && [content isEqualToString:@"0"]) {
content = @"";
}
cellView = [tableView makeViewWithIdentifier:identifier owner:self];
[[cellView textField] setStringValue:content ? content : @""];
}
return cellView;
}
- (void)tableView:(NSTableView *)tableView sortDescriptorsDidChange:(NSArray *)oldDescriptors {
NSMutableArray *mutableDataArray = [[self dataArray] mutableCopy];
[mutableDataArray sortUsingDescriptors:[tableView sortDescriptors]];
[self setDataArray:mutableDataArray];
[[self nameOnlyTableView] reloadData];
}
La solution
Il s'avère que non seulement la colonne du tableau doit être modifiable, mais que le champ de texte dans la vue cellulaire doit également être modifiable.La sélection de ce champ de texte et la sélection de Modifiable dans le menu Comportement ont résolu le problème.