[英]Background color of NSGridview
我試圖通過子類化NSGridView
並像這樣覆蓋它的draw
方法來設置它的背景顏色:
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 的子類,因此它繼承了 NSView 的所有屬性和方法,包括繪圖 - 如draw(_ dirtyRect: NSRect)
函數所示。 確保在您的視圖控制器中包含一個 IBOutlet,或者將 Interface Builder 中的NSGridView
類更改為 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")
}
}
基本上你的視圖控制器不知道你子類化了你的網格視圖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.