2011-10-13 16 views
8

Podczas tworzenia przycisku skosu kakao z niestandardowym obrazem i alternatywnym obrazem mam dziwne zachowanie. W stanie wciśniętym tło przycisku staje się białe. Dodaję przycisk jako podzbiór przezroczystego okna (okno HUD).NSButton białe tło po kliknięciu

Próbuję każdą technikę, że wiem:

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]; 

Próbowałem też

[closeButton setButtonType:NSMomentaryChangeButton]; 

[[closeButton cell] setHighlightsBy:NSContentsCellMask]; 

bez rezultatów.

Widać złego zachowania w załączonych screenach:

przycisk Bevel nakładanie okno HUD:
Bevel button overlaying a HUD window

niewłaściwy przycisk skos background:
Wrong Bevel button background

Odpowiedz

2

Tworzenie przycisk

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

przycisk Dodaj do okna

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

Nie jest dla mnie jasne, która to jest NSWindow myWindow. Czy to pojemnik na guziki? W tym przypadku jego zawartość rect jest zdefiniowana jako NSRect rect? – loretoparisi

+0

czy teraz jest jasne? –

+0

Brzmi świetnie! – loretoparisi

25

W zależności od sytuacji, może również pracować:

zmienić styl przycisk, aby Bevel lub kwadratowy, tryb powinien być ustawiony na „Chwilowy Change” i Granicznej , Transparent, Mixed i Selected powinny być WYŁĄCZONE. W ten sposób naprawiłem biały problem na moich przyciskach.

+0

Jest to problem występujący w systemie Mac OS 10.12, ale nie w wersji 10.13. – samatron

1

Powinieneś ustawić typ przycisku: myButton.buttonType = NSMomentaryChangeButton;

4

Zrobiłem to działa poprzez ustawienie cell.highlightsBy do ContentsCellMask: pojawia

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) 

ten sposób przycisk zaciemniony po naciśnięciu, ale nie brzydki kwadratowy. Testowane tylko w El Capitan).

+0

można również dodać "btn.alternateImage = myButtonAlternateImage", a zostanie wyświetlony po naciśnięciu przycisku –