簡體   English   中英

NSGridview 的背景色

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM