2014-07-26 3 views
1

셀 기반의 특정 셀 배경을 변경하려고합니다 NSTableView. 그러나 한 셀의 배경색을 변경하려고하면 전체 열에 영향을줍니다. 셀과 열 사이에 있어야하는 바인딩을 구분하는 방법이 있습니까?NSTableColumn의 모든 셀을 변경하지 않고 NSCell의 배경을 변경하십시오.

여기 (코멘트 내가 무슨 일이 일어나고 믿는 것을 설명과 함께) 내가 사용하고 코드입니다 :

// This allows me to change the background of the cell. 

[[[[_tableController1 registerTableView] tableColumnWithIdentifier:@"offset"] dataCellForRow:table1idx] setDrawsBackground:YES]; 

// This gets the cell within the given table column and row. 

[[[[_tableController1 registerTableView] tableColumnWithIdentifier:@"offset"] dataCellForRow:table1idx] setBackgroundColor:[NSColor redColor]];   

// This reloads the table so my changes can be visible. 

[[_tableController1 registerTableView] reloadData]; 

답변

4

셀 기반의 테이블 컬럼 당 하나의 셀을 사용합니다. 그것은 일종의 도장과 같습니다. 보이는 행을 내려 가서 해당 행의 셀을 설정하고 해당 행 + 열의 프레임 rect에 그려 줄 것을 지시 한 다음 다음 행으로 이동합니다.

테이블에 대한 대리인을 설정하고 -tableView:willDisplayCell:forTableColumn:row:을 구현해야합니다. 이 방법에서는 셀에 대한 속성을 행에 적합하게 설정하십시오. "특별"하다고 생각하는 행에 대해 속성을 설정할 수는 없습니다. 일부 행의 속성을 변경하는 경우 다른 행의 "normal"로 변경해야합니다.

- (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex 
{ 
    if ([[atTableColumn identifier] isEqualToString:@"offset"]) 
    { 
     if (rowShouldHaveRedBackground) 
     { 
      [aCell setDrawsBackground:YES]; 
      [aCell setBackgroundColor:[NSColor redColor]]; 
     } 
     else 
      [aCell setDrawsBackground:NO]; 
    } 
} 
:

그래서, 당신의 방법처럼 보일 수 있습니다

관련 문제