2011-10-13 19 views
8

Khi tạo nút bevel Cocoa với hình ảnh tùy chỉnh và hình ảnh thay thế, tôi đang có một hành vi lạ. Trong trạng thái nhấn, nền nút trở thành màu trắng. Tôi đang thêm nút làm subview của cửa sổ trong suốt (cửa sổ HUD).NSButton nền trắng khi nhấp vào

Tôi đang cố gắng mỗi kỹ thuật mà tôi biết:

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

Tôi cũng đã cố gắng

[closeButton setButtonType:NSMomentaryChangeButton]; 

[[closeButton cell] setHighlightsBy:NSContentsCellMask]; 

không có kết quả.

Bạn có thể thấy các hành vi sai trong các ảnh chụp màn hình kèm theo:

nút Bevel bao phủ một cửa sổ HUD:
Bevel button overlaying a HUD window

Wrong nút bevel nền:
Wrong Bevel button background

Trả lời

2

Tạo nút

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

Thêm nút để cửa sổ

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

Nó không rõ ràng với tôi là NSWindow myWindow này. Có phải là hộp chứa nút không? Trong trường hợp này rect nội dung của nó là những gì bạn định nghĩa là NSRect rect? – loretoparisi

+0

hiện đã rõ chưa? –

+0

Nghe có vẻ tuyệt vời! – loretoparisi

25

Tùy thuộc vào tình hình của bạn, điều này cũng có thể làm việc:

Thay đổi phong cách của nút để Bevel hoặc Square, chế độ phải được thiết lập để "Momentary Thay đổi" và Biên phòng , Trong suốt, Hỗn hợp và được chọn phải TẮT. Đây là cách tôi sửa vấn đề nền trắng trên các nút của tôi.

+0

Đây là sự cố trên Mac OS 10.12 nhưng không phải trên 10.13. – samatron

1

Bạn nên đặt loại nút: myButton.buttonType = NSMomentaryChangeButton;

4

tôi đã làm cho nó hoạt động bằng cách thiết lập cell.highlightsBy-ContentsCellMask:

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) 

Bằng cách này nút được tối khi ép, nhưng không có hình vuông xấu xí xuất hiện. Chỉ được thử nghiệm ở El Capitan).

+0

bạn cũng có thể thêm 'btn.alternateImage = myButtonAlternateImage' và nó sẽ hiển thị khi nhấn nút –