2011-10-13 5 views
8

커스텀 이미지와 대체 이미지로 코코아 경사 버튼을 만들 때 나는 이상한 행동을하고 있습니다. 눌린 상태에서 버튼 배경은 흰색이됩니다. 버튼을 투명한 창 (HUD 창)의 하위보기로 추가하고 있습니다. 나는 내가 아는 모든 기술을 시도하고있다클릭하면 NSButton 흰색 배경

:

NSButton *closeButton = [[NSButton alloc] initWithFrame:NSMakeRect(0.0, 0.0, 30.0, 30.0)]; 
     [closeButton setFrameOrigin:NSMakePoint(0.0, 0.0)]; 
     [closeButton setImagePosition:NSImageOnly]; 
     [closeButton setAction:@selector(closeWindowAction:)]; 
     [closeButton setBordered:NO]; 
     [closeButton setTransparent:NO]; 

     [closeButton setImage:[NSImage imageNamed:@"icon-tclose-off"]]; 
     [closeButton setAlternateImage:[NSImage imageNamed:@"icon-tclose-on"]]; 
     [closeButton setBezelStyle:NSShadowlessSquareBezelStyle]; 
     [closeButton setButtonType:NSMomentaryLightButton]; 

     //[[closeButton cell] setBackgroundColor:[NSColor clearColor]]; 
     [[closeButton cell] setHighlightsBy:NSChangeBackgroundCellMask|NSCellLightsByContents]; 
     //[[closeButton cell] setHighlightsBy:NSContentsCellMask]; 
     //[[closeButton cell] setShowsStateBy:0|NSContentsCellMask]; 

는 또한 어떤 결과

[closeButton setButtonType:NSMomentaryChangeButton]; 

[[closeButton cell] setHighlightsBy:NSContentsCellMask]; 

을 시도했다.

당신은 첨부 된 스크린 샷에서 잘못된 동작을 볼 수 있습니다

HUD에서 창 오버레이

경사 버튼 :
Bevel button overlaying a HUD window

잘못된 베벨 버튼 배경 :
Wrong Bevel button background

답변

2

만들기 버튼을

NSButton *myButton; 
myButton = [[NSButton new] autorelease]; 
[myButton setTitle: @"Hello!"]; 
[myButton sizeToFit]; 
[myButton setTarget: self]; 
[myButton setAction: @selector (function:)]; 
,210

귀하의 상황에 따라 창

unsigned int styleMask = NSTitledWindowMask 
          | NSMiniaturizableWindowMask; 
NSWindow *myWindow; 
myWindow = [NSWindow alloc]; 
/*get the size of the button*/ 
NSSize buttonSize; 
buttonSize = [myButton frame].size; 
/*set window content rect with the size of the button, and with an origin of our choice; (100, 100)*/ 
NSRect rect; 
rect = NSMakeRect (100, 100, 
        buttonSize.width, 
        buttonSize.height); 

myWindow = [myWindow initWithContentRect: rect 
         styleMask: styleMask 
         backing: NSBackingStoreBuffered 
         defer: NO]; 
[myWindow setTitle: @"my window"]; 
/*replacing the default window content view with our button*/ 
[myWindow setContentView: myButton]; 
+0

이 NSWindow myWindow는 분명하지 않습니다. 버튼 컨테이너입니까? 이 경우 내용 rect는 NSRect rect로 정의한 것입니다. – loretoparisi

+0

지금은 분명합니까? –

+0

아주 좋습니다. – loretoparisi

25

에 버튼을 추가,이 또한 작동 할 수 있습니다

변경이 경사 나 광장에있는 버튼의 스타일, 모드 설정해야 "순간 변경"및 국경에 , Transparent (투명), Mixed (혼합) 및 Selected (선택됨)가 OFF 여야합니다. 이것이 내가 단추에 흰색 배경 문제를 수정 한 방법입니다.

+0

이것은 Mac OS 10.12에서 발생하지만 10.13에서는 발생하지 않습니다. – samatron

1

버튼 유형을 설정해야합니다. myButton.buttonType = NSMomentaryChangeButton;

4

나는 ContentsCellMaskcell.highlightsBy를 설정하여 작업을 만든 :

let btn = NSButton(frame: myFrame) 

btn.image = myButtonImage 
btn.image?.size = myFrame.size 
btn.imagePosition = .ImageOnly 

btn.bordered = false  
(btn.cell as? NSButtonCell)?.highlightsBy = .ContentsCellMask 

view.addSubview(btn) 

누르면 버튼이 어두워 이런 식으로,하지만 추한 사각형이 나타납니다. 엘 캐피 탄에서만 테스트 됨).

+0

또한 'btn.alternateImage = myButtonAlternateImage'를 추가 할 수 있으며 버튼을 눌렀을 때 표시됩니다 –