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];
}
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top