2011-10-13 55 views
8

カスタムイメージと代替イメージでCocoa Bevelボタンを作成すると、私は奇妙な動作をしています。押した状態でボタンの背景が白くなります。 透明なウィンドウ(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:)]; 

あなたの状況に応じて、これがまた働くかもしれ

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(選択)はオフにする必要があります。これは私のボタンの白い背景の問題を修正した方法です。

+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'を追加すると、ボタンが押されたときに表示されます –

関連する問題