2013-10-16 1 views
2

어두운 배경에 밝은 텍스트가있는 사용자 지정 팝업 메뉴를 만들고 싶습니다. 나는 NSMenuItemsetView: 방법을 알고 있는데, 각 항목을 어두운 배경에 밝은 텍스트로 그릴 수 있습니다. 그러나 NSMenu은 밝은 색상의 메뉴 상단과 하단에 4 픽셀 높이의 스트립을 그립니다. NSMenu에는 재정의 할 수있는 공개 드로잉 메서드가 없으므로 이러한 스트립을 제거하는 방법을 볼 수 없습니다.사용자 정의 NSMenu의 위쪽 및 아래쪽 패딩을 제거 할 수 있습니까?

NSMenu 헤더에는 noTopPaddingnoBottomPadding이라는 개인 인스턴스 변수가 있습니다. 그래서 탄력있어!

답변

2

선언되지 않은 방법을 사용하여 해결책을 찾았습니다 (분명히 이상적은 아닙니다). 다음과 같이 먼저 선언 :

@interface NSMenu (secret) 
- (void) _setHasPadding: (BOOL) pad onEdge: (int) whatEdge; 
@end 

을 그리고, 언젠가 메뉴를 표시하기 전에 수행 :

if ([menu respondsToSelector: @selector(_setHasPadding:onEdge:)]) 
{ 
    [menu _setHasPadding: NO onEdge: 1]; 
    [menu _setHasPadding: NO onEdge: 3]; 
} 

내 시험이 스노우 레오파드에서 작동하지 않는 것을 보여 주지만, 사자, 산에 작업을 수행 라이온 및 매버릭스.

+0

[bridging header] (https://developer.apple.com/library/ios/)에 포함 된 Objective-C 헤더에'(secret)'인터페이스를 선언하면 이것을 Swift에서도 사용할 수 있습니다. documentation/suft/conceptual/buildingcocoaapps/MixandMatch.html # // apple_ref/doc/uid/TP40014216-CH10-XID_77) – Dov

+0

@Dov Swift에서 어떻게 사용합니까? 나는 브릿지 헤더를 가져 왔지만 여전히 '해결되지 않은 식별자 _setHasPadding'을 사용하고 있습니다. –

+0

@ Neeson.Z 정의 할 수있는 기능이 없으므로 100 % 스위프트 솔루션을 사용하여이를 수행하는 방법을 잘 모르겠습니다. 구현이없는 메소드의 헤더. 아마도 가장 좋은 방법은 브리징 헤더 (또는 브리징 헤더가 가져 오는 헤더)에 위의 카테고리를 정의하는 것입니다. – Dov