3

他の場所で説明したように、NSTabView には setBackgroundColor メソッドがなく、NSTabView をサブクラス化し、drawRect を使用してそれを制御することはできなくなりました - セグメント化されたコントロール ボタンのすぐ下のビットである上位 10% を描画しないためです。

今、私はこれを解決するためにしなければならなかった回避策の量に少し驚いています。見る

私が間違った道を進んだかどうか疑問に思っています。そして、これをより良く&簡単にする方法:

  • NSSegmentStyleTexturedSquare は、半透明のセグメント化されたコントロールを生成するようです。つまり、ベゼル ライン (ライン 240、253) を非表示にするために追加の作業を行う必要があります。

    • これを行うより良い方法はありますか?つまり、その透明性を否定しますか?

    • または、実際の/元のセグメント化された選択ボタンを使用できる方法はありますか?

  • [NSColor windowBackgroundColour] のように、必要な色が有用なものに設定されていない (つまり、透明である) ことがわかったので、今はそれらをハードコーディングしています (87、94 行目)。

    • これを行うより良い方法はありますか?
  • 物事を同期させるには、大量のふわふわしたメソッドが必要であることがわかりました (128 行目、134 行目など)。

    • これは回避できますか?
  • 再スケーリングの巧妙さを模倣するということは、分割されたコントロール ボックスを常に監視し、削除/サイズ変更する必要があることを意味します。それでも - オリジナルほど良くはない

    • これを行 157 よりも良い方法はありますか?つまり、サイズ変更について聞きますか? いつもするよりも?
  • 本物の McCoy とは異なり、フォーカスがウィンドウから取り除かれると、segementControl は暗くなります。

    • それは簡単に防ぐことができますか?これを追跡する安価な方法はありますか?
  • それとも、これは間違ったアプローチですか?ここでは透明な穴だけに焦点を当てて、NSTabViewItem に背景を描画させますか? しかし、いずれにせよ - Segemented Control ボックスにまだ問題があります - または、それをデフォルトに戻す方法はありません。

    • これを試してみると、「実際の」ウィンドウの背景色(「透明」)で描画されている上部の20〜30ピクセルに固執するため、色が上部またはセグメントバーの後ろまでずっと実行されず、ベゼルまで - ただし、代わりに、セグメント コントロールの下部から約 8 ピクセル下で停止します。

フィードバックをいただければ幸いです - これは、このような単純なことに対して、これまでにない/次善の策であると感じているためです - どうもありがとうございました。Brownie は、github コードをハッキング/フォークすることを指摘しています:) :) :) 実行中のコードの行には、1,000 語以上の言葉があります。

Dw。

4

3 に答える 3

1

PSMTabBarControlは、おそらくあなたにとって最良の回避策です。いくつかのカスタムタブビューを作成しましたが、cocoaはこのコントロールではうまく機能しません。PSMTabBarControlは、Xcode4をサポートするように更新されました。https://github.com/ciaran/psmtabbarcontrol

于 2012-01-09T16:58:20.120 に答える
0

状況が多少の脆弱性を許容できる場合、非常に単純で迅速なアプローチはNSTabView、アイテム サブビューのフレームをサブクラス化し、手動で調整することです。これにより、各アイテムにシームレスな黄色の背景が与えられます。

- (void)drawRect:(NSRect)dirtyRect {
    static const NSRect offsetRect = (NSRect) { -2, -16, 4, 18 };

    NSRect rect = self.contentRect;

    rect.origin.x += offsetRect.origin.x;
    rect.origin.y += offsetRect.origin.y;
    rect.size.width += offsetRect.size.width;
    rect.size.height += offsetRect.size.height;

    [[NSColor yellowColor] set];
    NSRectFill(rect);

    [super drawRect:dirtyRect];
}

のメトリックの将来の変更NSTabViewは明らかに問題になるため、自己責任で進めてください。

于 2015-10-03T08:49:07.563 に答える