2009-04-29 7 views
0

나는 모든 종류의 사용자 지정 드로잉을 수행하는 NSCell 하위 클래스가 있습니다. 내 컨트롤에서 완전히 벗어나는 유일한 경우는 연결된 컨텍스트 메뉴를 표시하기 위해 셀을 마우스 오른쪽 단추로 클릭하는 것입니다. 상황에 맞는 메뉴를 표시하는 동안 테이블 (또는 셀 (정확하게이 작업을 수행하고 있는지 확실하지 않음)이 포커스 rect를 그립니다. 나는 이것을 없애고 싶다. 적어도 내 인터페이스에 더 잘 들어 맞는 내 자신의 버전을 그리는 방법을 찾는다.NSCell에서 포커스 rect 제거.

나는 그들이 자체를 그리기 사각형이 초점을 통해 나에게 제어 할 수있는 것처럼 보일 약 15 가지 방법을 시도

(각종 첫 번째로 반응 방법, 다양한 그리기 방법, 다양한 강조 표시 색상 방법 등),하지만 난 아직 그것에 대해 무언가를 변화시키는 것을 찾아야합니다. 문제의

스크린 샷 : http://twitpic.com/3zx2t

나는 클래스 덤프 AppKit의 충분한 거의 짜증이고이 성가신 초점 RECT을 그릴 사용하고 개인 어떤 방법을 찾아보십시오. 내가하는 일 외에는 아무런 효과가 없습니다. 여기에 도움이된다면 제 정신과 미래의 머리카락을 많이 절약 할 수있을 것입니다.

감사합니다. 10.5 이후에

답변

2

테이블 뷰의 -drawRect:을 완전히 무시하지 않고서는 컨텍스트 메뉴 강조 표시 줄을 없애는 유일한 방법입니다.

- (void)_drawContextMenuHighlightForIndexes:(NSIndexSet *)rowIndexes clipRect:(NSRect)rect { 
    return; 
} 

이것은 적어도 Leopard에서 컨텍스트 메뉴로 활성화 될 셀 주위에 강조 표시를 그리는 데 사용되는 방법입니다. 불행히도 직접적으로 NSTableView-drawRect: 메서드에 의해 호출되며, 내가 아는 한 그 하이라이트가 그려지는 데있어서 당신의 무관심을 알리는 다른 방법은 없습니다.

물론이 API는 비공개 API이므로 Snow Leopard 또는 일부 다른 릴리스에서 작동을 멈출 수 있습니다. 그러나 최악의 경우, 최신 릴리스에서 프로그램에서 상황에 맞는 메뉴 강조 표시가 다시 시작될 수도 있고이 방법을 사용하는 다른 기능이 나중에 작동하지 않을 수도 있음을 의미합니다. 경고를 받았습니다.

0

는 NSTableView는 당신이 테이블의 모든 항목에 대한 상황에 맞는 메뉴를 표시 할 수 있습니다 (선택 사항을 변경하는 부작용없이 즉,.)

그것은 그 '초점 RECT'을 그립니다 컨텍스트 메뉴에서 어떤 항목이 작동하고 있는지 나타냅니다.

+0

나는 이제 어떻게 그 그림을 제거/제어합니까? –

+0

이 동작을 제어하는 ​​API는 없으며 표준주의 사항이있는 SPI 만 있습니다. 기본 표시기는 컨텍스트 메뉴 선택의 영향을받는 항목에 대한 사용자에게 중요한 피드백을 제공합니다. 이 항목을 제거하면 사용자에게 어떤 항목이 대상이되는지 알 수있는 대체 의견을 제공해야합니다. –

관련 문제