更改NSCollectionView的背景颜色

时间:2011-11-12 21:54:22

标签: cocoa

是否有机会以编程方式更改NSCollectionView的背景颜色?

我正在尝试继承......但没有工作..

 @interface CollectionViewBg : NSCollectionView

in .m

 [self setBackgroundColors:[NSArray arrayWithObjects:[NSColor blueColor], nil]];

3 个答案:

答案 0 :(得分:3)

在.m中,删除此行:

 [self setBackgroundColors:[NSArray arrayWithObjects:[NSColor blueColor], nil]];

并使用此代码:

- (void)drawRect:(NSRect)dirtyRect{

[[NSColor blueColor] setFill];
NSRectFill(dirtyRect);

}

另外不要忘记将IB中的NSCollectionView对象的类更改为CollectionViewBg。

希望这会有所帮助:)

答案 1 :(得分:0)

猜猜子类化并不是一个好主意,因为大多数Cocoa控件都提供了各种技术来避免子类化以自定义外观和行为。

在这种特殊情况下,您可以将backgroundView属性设置为NSCollectionView,并提供专用于绘制自定义背景的自定义视图。

如果您只需要更改背景颜色,那么您可以考虑利用集合视图通常在滚动视图内部进行抵制的事实。只需设置backgroundColor的{​​{1}}和drawsBackground属性。

答案 2 :(得分:0)

这是一个更现代的解决方案。首先,使自己成为绘制所需效果的NSView子类。这是一个简单的颜色,可以绘制块状颜色:

class ColouredView: NSView {
    @IBInspectable var color: NSColor = .windowBackgroundColor

    override func draw(_ dirtyRect: NSRect) {
        color.setFill()
        dirtyRect.fill()
    }
}

现在转到您的笔尖或情节提要,然后将自定义视图拖到左侧栏上。我们不希望它成为视图层次结构的一部分,但我们希望将其列出在包含集合视图的视图控制器下。只需将其拖到“第一响应者”下方即可。然后,您可以设置任何重要的属性或关系-对于我来说就是背景色。

最后,右键单击您的收藏夹视图,并将其“背景视图”插座连接到您的自定义视图。这使您可以在情节提要中进行所有设置。如果愿意,可以创建自定义视图@IBDesignable,但我发现通常这会带来更多麻烦,而不是值得的。