2012-06-14 4 views
0

내 NSOutlineView에 두 개의 열이 있습니다. 하나는 텍스트 및 이미지 셀입니다 (DragNDropOutlineView Apple 샘플 코드의 클래스와 비슷 함). 그 다음으로는 "XFToggleCell"이라는 사용자 정의 NSCell 하위 클래스가 있는데,이 하위 클래스는 Photoshop처럼 켜고 끌 수있는 가시성 아이콘 (안구)을 표시하는 데 사용됩니다.다른 NSCell이 변경 될 때 NSCell 새로 고침

XFToggleCell은 마우스 추적/드래그 (다시 Photoshop처럼)를 지원하므로 하나의 안구를 클릭하고 한 번에 여러 항목 표시/숨기기를 할 수 있습니다. 텍스트 및 이미지 셀에서 항목이 숨겨져 있으면 회색으로 표시하고 그렇지 않은 경우에는 검정으로 표시합니다.

거의 모든 것이 잘 작동합니다. 안구 (XFToggleCell)를 클릭하면 이미지가 지워지고 모델 객체가 숨겨집니다. 그러나 토글 셀을 다시 클릭하기 전까지는 인접한 텍스트 및 이미지 셀의 글꼴이 회색으로 변하지 않습니다 (업데이트되지 않습니다) ... 할 때 이미지와 텍스트 셀의 텍스트의 색상이 항상 그것은 있어야합니다 (가시성을 클릭하면 텍스트가 회색으로 바뀌고 그 반대도 마찬가지입니다).

토글 셀의 값이 변경되기 전에 텍스트 및 이미지 셀이 다시 그려지기 때문입니다. 결과적으로, 그 디스플레이는 항상 "한 번의 클릭 뒤"가됩니다. 순서는 다음과 같습니다.

  1. 1 번 토글 셀에 마우스를 놓습니다.
  2. 열 0의 텍스트 및 이미지 셀이 다시 그려집니다.
  3. 열 1의 토글 셀에 대한 객체 값이 변경됩니다.
  4. 열 1의 토글 셀이 다시 그려집니다. I 위의 5 단계로 열 0의 텍스트 및 이미지 셀의 재 묘화를 강제 할 수있는 경우

, I는 갈 수 있어야한다.

열 1의 셀을 클릭 한 결과로 열 0의 텍스트 및 이미지 셀의 그림을 강제로 업데이트하려면 어떻게해야합니까? 여기

내가 키 방법은 ... 1 열에 내 XFToggleCell.m에서 무슨 생각의 구현입니다 :

- (BOOL)startTrackingAt:(NSPoint)startPoint inView:(NSView *)controlView 
{ 
    . 
    . 
    . 
    ...do some stuff... 
    . 
    . 
    . 
    //Here's where I change the cell's object value, causing the cell to be redrawn. 
    //This part works fine. 
    [self setObjectValue:([self.representedObject newState]) ? self.image : nil]; 
    . 
    . 
    . 
    //Why doesn't this next line update the adjacent cell?!?!?!?!? 
    //Column 0 contains the text and image cell I'm trying to update 
    [controlView setNeedsDisplayInRect:[(NSOutlineView *)controlView frameOfCellAtColumn:0 row:thisRow]]; 
    } 
    return YES; 
} 
+0

이 질문을하는 또 다른 방법은 다음과 같습니다. 사용자 지정 XFToggleCell에서 텍스트 및 이미지 셀의 종속성을 어떻게 설정합니까? –

답변

2

글쎄, 난 그 이유를 확실히 모르겠지만,

를 호출 내 XFToggleCell 클래스의
-(BOOL)startTrackingAt:(NSPoint)startPoint inView:(NSView *)controlView 

의 말에 넣을 때
[(NSOutlineView *)controlView setNeedsDisplayInRect:[(NSOutlineView *)controlView frameOfCellAtColumn:col row:row]]; 

작동하지 않았다.

그래서 난 내 NSOutlineView 데이터 소스에서 내

-(void) outlineView:(NSOutlineView *)outlineView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn byItem:(id)item 

방법의 말에

[outlineView setNeedsDisplayInRect:[outlineView frameOfCellAtColumn:col row:row]]; 

을 추가 시도하고 일했다. 왜 그런지는 모르겠지만,이 방법이 있습니다. 누군가가 셀에서 본질적으로 똑같은 것을 호출하지 못하는 이유에 관해 밝히는 사람이 있다면, 나는 그 정보를 높이 평가할 것이다.