Pergunta

Eu tenho um NSTableView com uma única coluna.Esta coluna tem "Editável" check-in Interface Builder, mas duas vezes em uma célula na tabela de vista não faz nada.Eu já confirmados (em -tableView:viewForTableColumn:row: verificando [tableColumn isEditable]) que a coluna da tabela tem o sinalizador definido.O que poderia impedir que a coluna de ser a edição se isEditable == YES?

Foi sugerido que incluir meu datasource e delegate código.O dataArray é uma propriedade que armazena NSManagedObject subclasse objetos. listPopupButton seleciona qual entidade para ser ver em um NSTableView que pode apresentar diferentes entidades, todos os que têm apenas um nome de atributo (como indicado pelo nameOnlyItems método que retorna uma matriz destes).

- (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];
}
Foi útil?

Solução

Acontece que não só a coluna da tabela precisa ser editável, mas o campo de texto na célula ler faz bem.Selecionando esse campo de texto e selecionando Editável a partir do Comportamento de menu resolvido o problema.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top