是否有机会以编程方式更改NSCollectionView的背景颜色?
我正在尝试继承......但没有工作..
@interface CollectionViewBg : NSCollectionView
in .m
[self setBackgroundColors:[NSArray arrayWithObjects:[NSColor blueColor], nil]];
答案 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
,但我发现通常这会带来更多麻烦,而不是值得的。