2011-10-13 22 views
8

पर क्लिक किया गया कस्टम छवि और वैकल्पिक छवि के साथ कोको बेवल बटन बनाते समय मुझे एक अजीब व्यवहार हो रहा है। दबाए गए राज्य में बटन पृष्ठभूमि सफेद हो जाती है। मैं एक पारदर्शी विंडो (एचयूडी विंडो) के सबव्यूव के रूप में बटन जोड़ रहा हूं।एनएसबटन सफेद पृष्ठभूमि जब

मैं हर तकनीक है कि मैं जानता हूँ कि कोशिश कर रहा हूँ:

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

यह मुझे स्पष्ट नहीं है कि यह एनएसविंडो मायविंडो कौन सा है। क्या यह बटन कंटेनर है? इस मामले में इसकी सामग्री आय क्या है जिसे आपने NSRect rect के रूप में परिभाषित किया है? – loretoparisi

+0

अब यह स्पष्ट है? –

+0

यह बहुत अच्छा लगता है! – loretoparisi

25

के लिए बटन जोड़ें, यह भी काम कर सकते हैं:

बदलें बेवल या वर्ग के लिए बटन की शैली, मोड सेट किया जाना चाहिए "मोमेंट्री बदलें" और सीमा को , पारदर्शी, मिश्रित और चयनित बंद होना चाहिए। इस तरह मैंने अपने बटन पर सफेद पृष्ठभूमि की समस्या तय की है।

+0

यह मैक ओएस 10.12 पर एक मुद्दा है लेकिन 10.13 पर नहीं। – samatron

1

आपको बटन प्रकार सेट करना चाहिए: myButton.buttonType = NSMomentaryChangeButton;

4

मैं इसे ContentsCellMask करने के लिए cell.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' भी जोड़ सकते हैं और यह तब दिखाएगा जब बटन दबाया जाएगा –