MacアプリケーションにNSButtonがあり、その色をプログラムで変更したいのですが、試しても何も機能しないようです。 NSButtonCellで出力を作成して背景色を設定しようとしましたが、それも機能しませんでした。コードスニペットは役に立ちます。
標準のアクア(丸型)ボタンは、システムによって描画されます。そのような背景色はありません。実際には、Cocoaがつなぎ合わせて一貫したボタン画像を作成する画像で構成されています。したがって、Cocoaはお好みに合わせて画像の色を変更できません。デフォルトのボタン(Returnがそのキー相当物として設定されているボタン)のみが青色の脈打つ背景になります。
やりたいことは、NSButtonCell
をサブクラス化して独自の描画を行うことです。ボタンイメージの色を変更して必要な効果を得たい場合は、優れた Theme Park ユーティリティを使用して、Appleのボタンイメージのコピーを抽出し、それらを使用できます。 iTunesのスクローラーなど、他の方法ではアクセスできない特定のインターフェイス要素を「盗む」ために、これを自分で行ったことを認めます。
ボーダレスボタンのすべてがIBに接続されていると仮定します。
// *.h file
IBOutlet NSButton* myButton;
// *.m file
[[myButton cell] setBackgroundColor:[NSColor redColor]];
setBackgroundColor ドキュメントからの注意:
「背景色は、縁なしボタンを描画するときにのみ使用されます。」
これでうまくいかない場合は、NSButtonをオーバーライドして、自分で描画を実装する必要があります。
幸運を。
これを行う別の可能な方法を次に示します。
let button = NSButton()
button.title = ""
button.bezelStyle = .texturedSquare
button.isBordered = false //Important
button.wantsLayer = true
button.layer?.backgroundColor = NSColor.red.cgColor
NSButton
というFlatButton
サブクラスを作成しました。これにより、Interface Builderからボタンの背景色、テキストの色、アイコンの色、ボーダー、およびその他のタイプのスタイルを簡単に変更できます。
マークの答えは正しいです。ただし、コードで行うのが面倒な場合は、インターフェイスビルダーで直接設定する方法もあります。
User Defined Runtime Attributes
というセクションを探します。backgroundColor
に変更します。タイプをColor
に変更します。値を次のように変更します。希望する色(カラーピッカーが表示されます)できました。
1つの方法は、ボタンの背後にビューを作成し、その色を設定することです。これにより、同じフレームでビューが作成され、ビューの上にボタンが配置されます。ボタンのタグを使用して、ビューを1回だけ追加することを確認します。これにより、UIを描画するときにメソッドを繰り返し呼び出すことができます。
テキストの色を設定するためのコードを含めました。
必要に応じて色とアルファを変更します。
NSColor *colour = [NSColor colorWithRed:0.0 green:0.0 blue:1.0 alpha:0.5] ;
[self styleButton:button colour:colour] ;
-(void) styleButton:(NSButton *)button colour:(NSColor *)colour {
[self setButton:button fontColor:[NSColor whiteColor]];
if(button.tag == 9901) return ;
button.bezelStyle = NSBezelStyleTexturedSquare ;
[button setBordered:NO];
NSView *b2 = [[NSView alloc] initWithFrame:button.frame] ;
[button.superview addSubview:b2] ;
b2.layer.backgroundColor = colour.CGColor;
[button removeFromSuperview];
[b2.superview addSubview:button];
button.tag = 9901 ;
}
-(void) setButton:(NSButton *)button fontColor:(NSColor *)color {
NSMutableAttributedString *colorTitle = [[NSMutableAttributedString alloc] initWithAttributedString:[button attributedTitle]];
[colorTitle addAttribute:NSForegroundColorAttributeName value:color range:NSMakeRange(0, button.attributedTitle.length)];
[button setAttributedTitle:colorTitle];
}
Swiftでは、次のようにすることができます:
(button.cell as! NSButtonCell).isBordered = false
(button.cell as! NSButtonCell).backgroundColor = .white
これらの素晴らしい答えをありがとう。背景色、境界線属性(色、幅、角)、およびタイトル属性(色、フォント)を簡単に設定できるNSButtonサブクラスをコンパイルしました。
自由に使用してください: https://github.com/philfung/osx-dudley/blob/master/DudNSButton.Swift