web-dev-qa-db-ja.com

NSButtonの背景色を変更する

MacアプリケーションにNSButtonがあり、その色をプログラムで変更したいのですが、試しても何も機能しないようです。 NSButtonCellで出力を作成して背景色を設定しようとしましたが、それも機能しませんでした。コードスニペットは役に立ちます。

25
aleemb

標準のアクア(丸型)ボタンは、システムによって描画されます。そのような背景色はありません。実際には、Cocoaがつなぎ合わせて一貫したボタン画像を作成する画像で構成されています。したがって、Cocoaはお好みに合わせて画像の色を変更できません。デフォルトのボタン(Returnがそのキー相当物として設定されているボタン)のみが青色の脈打つ背景になります。

やりたいことは、NSButtonCellをサブクラス化して独自の描画を行うことです。ボタンイメージの色を変更して必要な効果を得たい場合は、優れた Theme Park ユーティリティを使用して、Appleのボタンイメージのコピーを抽出し、それらを使用できます。 iTunesのスクローラーなど、他の方法ではアクセスできない特定のインターフェイス要素を「盗む」ために、これを自分で行ったことを認めます。

12
Alex

ボーダレスボタンのすべてがIBに接続されていると仮定します。

// *.h file
IBOutlet NSButton* myButton;

// *.m file
[[myButton cell] setBackgroundColor:[NSColor redColor]];

setBackgroundColor ドキュメントからの注意:

「背景色は、縁なしボタンを描画するときにのみ使用されます。」

これでうまくいかない場合は、NSButtonをオーバーライドして、自分で描画を実装する必要があります。

幸運を。

40
Mark

これを行う別の可能な方法を次に示します。

    let button = NSButton()
    button.title = ""
    button.bezelStyle = .texturedSquare
    button.isBordered = false //Important
    button.wantsLayer = true
    button.layer?.backgroundColor = NSColor.red.cgColor
10
brianLikeApple

NSButtonというFlatButtonサブクラスを作成しました。これにより、Interface Builderからボタンの背景色、テキストの色、アイコンの色、ボーダー、およびその他のタイプのスタイルを簡単に変更できます。

https://github.com/OskarGroth/FlatButton

FlatButton for macOS

6
Oskar

ストーリーボードの設定で問題が発生した場合は、参照チェックのために、以下に示すように、プロパティを直接NSButtonに設定できます。

enter image description here

結果:
enter image description here

4
The iCoder

マークの答えは正しいです。ただし、コードで行うのが面倒な場合は、インターフェイスビルダーで直接設定する方法もあります。

  1. InterfaceBuilderでボタンを見つけてクリックします。
  2. インターフェイスビルダーのオブジェクトブラウザーセクションに、クリックしたボタンにドロップダウン開示アイコンが表示されます。クリックして。次に、NSButtonのNSButtonCellが表示されます。クリックして。
  3. NSButtonCellを選択して、Identity-Inspectorをクリックします。
  4. Identity-inspectorで、User Defined Runtime Attributesというセクションを探します。
  5. 小さなプラス(+)記号をクリックして、値を追加します。値には3つのプロパティがあることが示されます。 (A) keyPath (B)タイプ(C)
  6. KeyPathをbackgroundColorに変更します。タイプをColorに変更します。値を次のように変更します。希望する色(カラーピッカーが表示されます)

できました。

3
swift nub

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];
}
1
A.Badger

Swiftでは、次のようにすることができます:

(button.cell as! NSButtonCell).isBordered = false
(button.cell as! NSButtonCell).backgroundColor = .white
1
GuiDupas

これらの素晴らしい答えをありがとう。背景色、境界線属性(色、幅、角)、およびタイトル属性(色、フォント)を簡単に設定できるNSButtonサブクラスをコンパイルしました。

自由に使用してください: https://github.com/philfung/osx-dudley/blob/master/DudNSButton.Swift

0
Philip Fung