NSGridview 的背景色
Background color of NSGridview
我尝试通过子类化并覆盖其 draw
方法来设置 NSGridView
的背景颜色,如下所示:
class GridViewGreen: NSGridView
{ override func draw(_ dirtyRect: NSRect)
{ super.draw(dirtyRect)
let color = NSColor.green
let bp = NSBezierPath(rect: dirtyRect)
color.set()
bp.stroke()
print("drawing GridViewGreen")
}
}
但从未调用 draw
方法。
NSGridView
是一个轻量级组件,像NSStackView
一样,仅用于布局。因此它不绘制。
只需将 NSGridView
放入 NSBox
并设置其 fillColor
。
更新:如果可能的话最好采纳catlan的回答。他是对的,NSGridView 并不是真正用于渲染,这种方法或多或少会迫使它走这条路。
在这一点上,几乎每个 Cocoa 应用程序都应该对其视图进行分层支持,NSGridView 和 NSStackView 没有任何不同。只需在图层上设置背景颜色即可。
let gridView = NSGridView(views: [[view1, view2]])
gridView.wantsLayer = true
gridView.layer?.backgroundColor = NSColor.red.cgColor
NSGridView 是 NSView 的子class,因此它继承了 NSView 的所有属性和方法包括 绘图 - 如 draw(_ dirtyRect: NSRect)
函数所示。确保在视图控制器中包含一个 IBOutlet 或将 Interface Builder 中的 NSGridView
class 更改为 GridViewGreen。
class GridViewGreen: NSGridView {
override init(frame frameRect: NSRect) {
super.init(frame: frameRect)
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
NSColor.green.setFill()
dirtyRect.fill()
print("drawing GridViewGreen")
}
}
基本上您的视图控制器并不知道您class编辑了您的网格视图。
我尝试通过子类化并覆盖其 draw
方法来设置 NSGridView
的背景颜色,如下所示:
class GridViewGreen: NSGridView
{ override func draw(_ dirtyRect: NSRect)
{ super.draw(dirtyRect)
let color = NSColor.green
let bp = NSBezierPath(rect: dirtyRect)
color.set()
bp.stroke()
print("drawing GridViewGreen")
}
}
但从未调用 draw
方法。
NSGridView
是一个轻量级组件,像NSStackView
一样,仅用于布局。因此它不绘制。
只需将 NSGridView
放入 NSBox
并设置其 fillColor
。
更新:如果可能的话最好采纳catlan的回答。他是对的,NSGridView 并不是真正用于渲染,这种方法或多或少会迫使它走这条路。
在这一点上,几乎每个 Cocoa 应用程序都应该对其视图进行分层支持,NSGridView 和 NSStackView 没有任何不同。只需在图层上设置背景颜色即可。
let gridView = NSGridView(views: [[view1, view2]])
gridView.wantsLayer = true
gridView.layer?.backgroundColor = NSColor.red.cgColor
NSGridView 是 NSView 的子class,因此它继承了 NSView 的所有属性和方法包括 绘图 - 如 draw(_ dirtyRect: NSRect)
函数所示。确保在视图控制器中包含一个 IBOutlet 或将 Interface Builder 中的 NSGridView
class 更改为 GridViewGreen。
class GridViewGreen: NSGridView {
override init(frame frameRect: NSRect) {
super.init(frame: frameRect)
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
NSColor.green.setFill()
dirtyRect.fill()
print("drawing GridViewGreen")
}
}
基本上您的视图控制器并不知道您class编辑了您的网格视图。