¿Qué impediría que una NSTableColumn editable fuera editable al hacer doble clic?
-
22-12-2019 - |
Pregunta
Yo tengo un NSTableView
con una sola columna.Esta columna tiene marcada "Editable" en Interface Builder, pero hacer doble clic en una celda en la vista de tabla no hace nada.He confirmado (en -tableView:viewForTableColumn:row:
comprobando [tableColumn isEditable]
) que la columna de la tabla tiene establecida la bandera editable.¿Qué impediría que la columna se editara si isEditable == YES
?
Se ha sugerido que incluya mi fuente de datos y código delegado.El dataArray
es una propiedad que almacena NSManagedObject
objetos de subclase. listPopupButton
selecciona qué entidad ver en un NSTableView
que puede mostrar diferentes entidades, todas las cuales tienen solo un atributo de nombre (como lo indica el nameOnlyItems
método que devuelve una matriz de estos).
- (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];
}
Solución
Resulta que no solo la columna de la tabla necesita ser editable, sino que el campo de texto en la vista de celda también lo hace.Al seleccionar este campo de texto y seleccionar Editable desde el menú Comportamiento resolvió el problema.