0

我想使用 NSTableView 向用户显示磁盘列表,我认为显示它们的方式与普通 NSTableView 稍有不同会更好。这是一个图像作为示例:

我想要这样的东西

我想要的功能是:

  1. 较厚的行(就像这个)
  2. 用于选择的漂亮渐变,而不是普通颜色
  3. 左侧的一张图片(驱动器的图标)和右侧的文字(名称),但仅使用一列(名称类似于“可用磁盘”)

我特别不愿意做第三个,因为我认为这将涉及做我自己的单元子类并自己绘制文本和图像,我知道该怎么做:(

我认为一旦有人指出我正确的方向,其他的就不会那么困难了......

PS:图片来自偏好设置中的 Xcode 4。

4

2 回答 2

0

您可以使用 NSCollectionView,并设计一个用于您的行的自定义 NSView,尽管请参阅此问题和答案以了解有关 XCode 4 的一些注意事项。

于 2011-08-10T18:01:21.120 回答
0

好的!我发现如何完成所有这三件事:

  1. 您可以在 IB 中更改行粗
  2. 你也可以在 IB 中通过将“Highlight”更改为“Source List”而不是“Regular”来完成那个漂亮的渐变
  3. 现在对于第三个,我做了一些与我说的我想要的有点不同的事情:

    • 在 IB 中,我检查了“标题”,因此可以在用户不知情的情况下使用两列
    • 第一列我放了一个图像单元格,而在第二列我放了一个文本单元格
    • 然后,因为我改变了行的高度,我注意到 NSTextViewCell 没有垂直对齐文本,也没有选项,这意味着我最终有一个 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 回答