편집 가능한 NSTableColumn을 두 번 클릭할 때 편집할 수 없게 만드는 것은 무엇입니까?

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

문제

나는 가지고있다 NSTableView 하나의 열로.이 열에는 Interface Builder에서 "Editable"이 선택되어 있지만 테이블 보기에서 셀을 두 번 클릭하면 아무 작업도 수행되지 않습니다.나는 확인했다(에서 -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