Objective c 通过三种方式对NSTableView进行个性化设置

Objective c 通过三种方式对NSTableView进行个性化设置,objective-c,cocoa,nstableview,nstableviewcell,Objective C,Cocoa,Nstableview,Nstableviewcell,我想使用NSTableView向用户显示磁盘列表,我认为最好与普通的NSTableView显示的磁盘列表稍有不同。以下是一幅图像作为示例: 我想要的功能包括: 像这一排一样厚的一排 用于选择的漂亮渐变,而不是普通颜色 左侧的一个图像显示驱动器图标,右侧的文本显示驱动器名称,但仅使用一列名称,如可用磁盘 我特别不愿意做第三件事,因为我认为这将涉及到我自己的细胞子类和自己绘制文本和图像,我不知道该怎么做: 其他的我想,一旦有人给我指出了正确的方向,它们就不会那么难了 PS:图像来自首选项中的Xcod

我想使用NSTableView向用户显示磁盘列表,我认为最好与普通的NSTableView显示的磁盘列表稍有不同。以下是一幅图像作为示例:

我想要的功能包括:

像这一排一样厚的一排 用于选择的漂亮渐变,而不是普通颜色 左侧的一个图像显示驱动器图标,右侧的文本显示驱动器名称,但仅使用一列名称,如可用磁盘 我特别不愿意做第三件事,因为我认为这将涉及到我自己的细胞子类和自己绘制文本和图像,我不知道该怎么做:

其他的我想,一旦有人给我指出了正确的方向,它们就不会那么难了


PS:图像来自首选项中的Xcode 4。

您可以使用NSCollectionView,并设计一个用于行的自定义NSView,尽管有关Xcode 4的一些小洞,请参见。

好的!我发现了这三件事都可以做到:

您可以在IB中更改行厚度 在IB中,也可以通过将高亮显示改为源列表而不是常规列表来实现这一良好的渐变效果 第三次,我做了一些与我所说的略有不同的事情:

在IB中,我检查了标题,因此可以在用户不知道的情况下使用两列 第一列我放了一个图像单元格,而第二列我放了一个文本单元格 然后,因为我更改了行的高度,我注意到NSTextViewCell没有垂直对齐文本,也没有相应的选项,这意味着我最终得到了一个用于居中文本的NSTextViewCell子类。这是: `


那里!到目前为止,我做得很好

嗯,我已经考虑过使用它,但我认为一个简单的列表会更好。另外,我已经或多或少习惯了NSTableView。。。。是否仍然可以使用NSTableView执行此操作?这张图片显示了一个NSTableView,所以..我想你可以通过创建自己的NSCell来实现。您可能需要查看preparedCellAtColumn:row:和NSTableViewDelegate方法tableView:willDisplayCell:forTableColumn:row:
@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