2012-03-31 9 views
7

NSSegmentedControlのサブクラスを用意したいと思います。さまざまなセグメントの色が異なる場合があります。あります、全体が同じ色を制御セグメント化その1その色を除く近いこの場合、赤、および2に見えるNSSegmentedControl Colors

- (void)drawRect:(NSRect)dirtyRect 
{ 
    NSColor *color = [NSColor redColor]; 
    [color setFill]; 
    NSRectFill(dirtyRect); 
    [super drawRect:dirtyRect]; 
} 

enter image description here

:私はNSSegmentedControlをサブクラス化しようとしたし、次のコードを追加しましたエッジの色が少し出る。様々なセグメントは、ユニークな色を表示している、しかし、私はほとんどこの許容を検討しないだろう

- (void)drawSegment:(NSInteger)segment inFrame:(NSRect)frame withView:(NSView *)controlView 
{ 
    NSColor *color; 
    switch (segment) { 
     case 0: 
      color = [NSColor redColor]; 
      break; 
     case 1: 
      color = [NSColor blueColor]; 
      break; 
     case 2: 
      color = [NSColor greenColor]; 
      break; 
     case 3: 
      color = [NSColor orangeColor]; 
      break; 
     default: 
      break; 
    } 
    [color setFill]; 
    NSRectFill(frame); 
    [super drawSegment:segment inFrame:frame withView:controlView]; 
} 

enter image description here

これは、という点で優れている:

は、私はまた、NSSegmentedCellをサブクラス化し、これを追加してみました。セグメント全体に適切な色を塗りつぶして、最初のスクリーンショットのようにグラデーションとシェーディングがあればいいと思います。

私はこれをどのように達成できるか教えてください。

ありがとうございました。

+0

を無効にすることを忘れないでください(スクリーンショットは私のテストプロジェクトからである)かなり良い動作しますセグメント化されたコントロールの現在の実装では、図面の半透明性が使用されています。これにより、コントロールの下にペイントしている赤色が輝きます。これはMac OS Xのアップデートによって変更される可能性があります。これを正しく行うには、既存のコントロールを色づけするのではなく、drawRectのすべての描画を行う独自のNSViewサブクラスを作成する必要があります。 –

+0

オハイオ州ジョンはおそらくあなたが言っていることに関連し、実際には約半ダースの異なるスタイルがあります。私は他のスタイルがこれにどのように影響を与えるのだろうかと思います。 –

答えて

4

セグメントの固定幅を指定する必要があります。

enter image description here

次に、あなたのコードは

enter image description here

そして、あなたがしている色合い

[self.segment.cell setControlTint:NSClearControlTint ]; 
関連する問題