2012-02-28 5 views
1

저는 사용자 정의 NSCell 서브 클래스 인 IconCell이있는 NSTableView를 가지고 있습니다.NSButton은 사용자 정의 NSCell 내부에 그려 지지만 실제로는 클릭 할 수 없습니다.

IconCell에는 이미지, 텍스트 및 버튼의 세 가지 요소가 포함되어 있습니다.

- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView 
{ 
    NSPoint cellPoint = cellFrame.origin; 

    [controlView lockFocus]; 

    CGFloat buttonWidth = [closeButton frame].size.width; 

    [someNSImage drawInRect:NSMakeRect(cellPoint.x, cellPoint.y, ICON_WIDTH, ICON_HEIGHT) fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0 respectFlipped:YES hints:nil]; 
    [someNSString drawInRect:NSMakeRect(cellPoint.x+ICON_WIDTH+PADDING, cellPoint.y, cellFrame.size.width - ICON_WIDTH - buttonWidth, cellFrame.size.height) withAttributes:someTextAttributes]; 
    [(NSButtonCell*)[closeButton cell] drawWithFrame:NSMakeRect(cellPoint.x + cellFrame.size.width - buttonWidth, cellPoint.y, buttonWidth, cellFrame.size.height) inView:controlView]; 

    [controlView unlockFocus]; 
} 

그리기 부분은 잘 작동하고 다음과 같이 뭔가를 생성합니다 : 무엇을이다

cell screenshot

여기 내 드로잉 코드의 단순화 된 버전 (closeButton 버튼입니다)입니다 내가 원하는.

또한 사용자가 셀과 상호 작용할 때 두 가지 상황 중 하나를 원합니다. 즉, 사용자가 셀의 아무 곳이나 클릭하면 닫기 버튼을 제외하고는 actionA을 수행해야합니다. 사용자가 닫기 버튼을 클릭하면 actionB을 수행해야합니다.

닫기 버튼이 보이지 않는 것처럼 보입니다. 클릭하면 작동하지 않지만 작동 버튼은 눌려진 상태로 표시됩니다. 일반적으로 작동합니다. 마치 존재하지 않는 것처럼 마치 actionB 대신 actionA이 트리거됩니다.

[tableView setAction:@selector(actionA)]; 

[closeButton setAction:@selector(actionB)]; 

내가 잘못 뭐하는 거지 :

이 내가이 작업을 설정하는 방법입니까?

답변

1

그냥 셀에있는 단추 그림을 그려야합니다. 실제 버튼을 셀에 배치하는 것과 같은 것은 아닙니다.

세포는 전체보기가 아니므로 처음 생각하는 것보다 더 복잡합니다. 실제로이 작업을 셀과 함께 수행해야하는 경우 여기에서 설명합니다 : NSButtonCell inside custom NSCell.

하지만 ... 자신을 10.7 이상으로 제한 할 수 있다면 뷰 기반 테이블 뷰를 추가 한 것입니다. 이는 NSTableViewCellView 안에 전체 NSButton을 넣을 수 있기 때문에 훨씬 간단합니다. 자세한 내용은 Table View Programming Guide에서 설명합니다. 자신을 10.7 이상으로 제한 할 수 있다면 강력히 추천합니다.

+0

정말 제가 상상했던 것보다 훨씬 더 복잡해졌습니다. 불행히도 나는 10.6에서 어떤 사람들을지지해야한다. 그래서 나는 첫 번째 해결책을 찾아야 할 것 같다. 감사! – houbysoft