2010-01-08 3 views
5

I 버튼을 클릭하면 NSTableView에서 선택한 행의 배경색을 설정하려고합니다. 사람들이 tableView:willDisplayCell:forTableColumn:row:setBackgroundColor:을 사용한 다른 사례를 보았습니다. 그러나 버튼을 클릭 할 때 내 상황에서 제대로 작동하지 않을 것이라고 생각합니다.NSTableView에서 행 착색하기

NSTableView의 selectedRow 메서드를 사용하여 선택한 행을 찾고 setBackgroundColor: 셀의 배경색을 설정할 수 있음을 알고 있지만 NSCell에 선택된 행에 대한 NSInteger에서 가져 오는 방법은 알 수 없습니다. 의 배경색을 설정합니다.

답변

7

NSTableView은 각 열마다 NSCell의 인스턴스를 하나만 사용합니다. 내용을 그리면 셀이 각 행에 대해 업데이트됩니다. 그렇기 때문에 지정된 행에 대해 셀을 가져올 방법이 없습니다. tableView:willDisplayCell:forTableColumn:row:의 셀을 수정해야합니다.

reloadDataForRowIndexes:columnIndexes:을 사용하여 하나의 행만 업데이트하도록 테이블보기에 지시 할 수 있습니다.

+0

난 그냥이 http://grab.by/1CoC하지만 색상마다 하나의 행을 시도했습니다 회색은 재 장전 한 것이 아닙니다. – Joshua

+1

1.'int'를 사용하지 마십시오. 'NSInteger'를 사용하십시오. 2. Nikolai가 말한 것을 시도하십시오. 3. 테이블 뷰 : willDisplayCell : forTableColumn : row :'메소드가 행이 선택되었는지 여부와 사용자가 버튼을 클릭했는지 여부를 점검하십시오. –

+0

1. 확인. 2 & 3. 내가 NSOutlineView를 가지고 있기 때문에 그가 한 말을 정확하게 할 수 없거나 NSOutlineView가 NSTableView에서 상속하기 때문에 할 수 있습니까? – Joshua

5

그렇지 않으면이 적용되지 않습니다 drawsBackgroundNSTextFieldCell에서 활성화되어 있는지 확인합니다 .. 우리가 각 행에 서로 다른 색상을 줄 수있는이 방법을 사용하여 NSTableview

- (void)tableView:(NSTableView *)tableView willDisplayCell:(id)cell1 forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row 
{ 
     if(row==1) 
     [cell1 setBackgroundColor:[NSColor redColor]]; 
     else if(row==2||row==3) 
     [cell1 setBackgroundColor:[NSColor greenColor]]; 
     else 
     [cell1 setBackgroundColor:[NSColor clearColor]]; 
} 

에 배경 색상을 설정하려면!

+0

'drawsBackground'에 좋은 포인터가 있습니다. – DTs

5

당신은 단순히 전체 선택된 행의 색상 변경하려는 경우 :

NSInteger selectedRow = [self.nsTableView selectedRow]; 
NSTableRowView* rowView = [self.nsTableView rowViewAtRow:selectedRow makeIfNecessary:NO]; 
[rowView setBackgroundColor:[NSColor blackColor]]; 

glhf을

+2

보기 기반 테이블을 사용하는 경우에만. 우리가 생각하는 것처럼 셀 기반 테이블에 대해 이야기하고 있다면 rowViewAtRow : ... 메서드는 항상 nil을 반환합니다. – dgatwood

관련 문제