0

ディスクのリストをユーザーに表示するために NSTableView を使用したいのですが、通常の NSTableView とは少し異なる方法で表示する方がよいと思います。例としての画像を次に示します。

私はこのようなものが欲しいです

私が欲しい機能は次のとおりです。

  1. より太い行 (これと同じように)
  2. 通常の色の代わりに、選択に使用される素敵なグラデーション
  3. 左側に 1 つの画像 (ドライブのアイコン) と右側にテキスト (名前) がありますが、使用する列は 1 つだけです (「使用可能なディスク」のような名前)。

私は自分のセルサブクラスを実行し、テキストと画像を自分で描画する必要があると思うので、3番目のことをするのは特に気が進まない.

誰かが私を正しい方向に向ければ、他のものはそれほど難しくないと思います...

PS: 画像は設定の Xcode 4 のものです。

4

2 に答える 2

0

NSCollectionView を使用して、行に使用されるカスタム NSView を設計することもできますが、XCode 4 のいくつかの警告については、この質問と回答を参照してください。

于 2011-08-10T18:01:21.120 に答える
0

大丈夫!これら3つのことすべてを行う方法を見つけました。

  1. IB で行の太さを変更できます
  2. 「Highlight」を「Regular」ではなく「Source List」に変更することで、IB でこの素敵なグラデーションを実行することもできます。
  3. 3 つ目は、私が望んでいたこととは少し異なることを行いました。

    • IB では、「ヘッダー」をオフにしたので、ユーザーが知らないうちに 2 つの列を使用できます。
    • 最初の列には画像セルを配置し、2 番目の列にはテキスト セルを配置しました
    • 次に、行の高さを変更したため、NSTextViewCell はテキストを垂直方向に揃えず、そのためのオプションもないことに気付きました。ここにあります:

`

@interface ACTCenteredTextFieldCell : NSTextFieldCell
{

}

@end

@implementation ACTCenteredTextFieldCell

- (NSRect)titleRectForBounds: (NSRect)theRect {
    NSRect titleFrame = [super titleRectForBounds: theRect];
    NSSize titleSize = [[self attributedStringValue] size];

    titleFrame.origin.y = theRect.origin.y + (theRect.size.height - titleSize.height) / 2.0;

    return titleFrame;
}

- (void)drawInteriorWithFrame: (NSRect)cellFrame inView: (NSView*)controlView {
    NSRect titleRect = [self titleRectForBounds: cellFrame];

    [[self attributedStringValue] drawInRect: titleRect];
}
@end

そこには!これまでのところうまくいきました!

于 2011-08-12T18:01:04.247 に答える