Что помешает редактировать редактируемый NSTableColumn при двойном щелчке?

StackOverflow https://stackoverflow.com//questions/20043298

Вопрос

у меня есть NSTableView с одной колонкой.Для этого столбца в Интерфейсном Разработчике установлен флажок «Редактируемый», но двойной щелчок по ячейке в представлении таблицы ничего не дает.Я подтвердил (в -tableView:viewForTableColumn:row: проверив [tableColumn isEditable]), что в столбце таблицы установлен редактируемый флаг.Что помешает редактированию столбца, если isEditable == YES?

Было предложено включить мой источник данных и код делегата.А dataArray это собственность, которая хранит NSManagedObject объекты подкласса. listPopupButton выбирает, какой объект будет просматриваться в NSTableView которые могут отображать разные сущности, все из которых имеют только атрибут имени (как указано в nameOnlyItems метод, который возвращает их массив).

- (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];
}
Это было полезно?

Решение

Оказывается, редактируемым должен быть не только столбец таблицы, но и текстовое поле в представлении ячейки.Выбор этого текстового поля и выбор параметра «Редактируемый» в меню «Поведение» решили проблему.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top