2011-11-11 130 views
2

正如其他地方所討論的,NSTabView沒有setBackgroundColor方法,並且子類化NSTabView,並使用drawRect來控制它不再起作用 - 因爲它沒有繪製前10%,位於分段控件下方按鈕。帶背景顏色的NSTabView

現在我對解決這個問題的工作量感到有些驚訝,看到

,我想知道如果我去了錯誤的道路。而如何做到這一點更好&簡單:

  • 的NSSegmentStyleTexturedSquare似乎得到了我一個半透明的分段控制。這意味着我需要做額外的工作來隱藏任何邊框線(240,253行)。

    • 有沒有更好的方法來做到這一點?即否定其透明度?

    • 或者有沒有一種方法可以使用實際的/原始的分段選擇按鈕?

  • 我發現我的顏色需要 - 如[NSColor windowBackgroundColour]沒有被設置爲任何有用的東西(即,一個是透明的) - 所以現在我硬編碼它們(線87,94)。

    • 有沒有更好的方法來做到這一點?
  • 我發現我需要一大堆蓬鬆的方法來保持同步(第128,134行等)。

    • 這可以避免嗎?
  • 我發現模仿巧妙的重新縮放意味着我需要不斷關注segemented控制框並刪除/調整大小。即使如此 - 它不如原來的

    • 有沒有更好的方法來做到這一點比157行 - 即聽說調整大小?而不是一直這樣做?
  • 當焦點從窗口中移除時,segementControl會變暗 - 不像真正的McCoy。

    • 可以很容易地防止?有沒有一種便宜的方式來跟蹤這個?
  • 或者這是錯誤的方法 - 我應該只關注這裏的透明孔 - 並讓NSTabViewItem繪製背景?但無論如何 - 那麼我仍然有Segemented控制框的問題 - 或者有辦法讓它再次成爲默認值。

    • 嘗試此操作時 - 我在「真實」窗口背景顏色(即「透明」)中繪製的頂部20-30像素卡住,因此顏色不會一直運行到頂部或者在分段欄後面,直到擋板 - 但是會停止在分段控件底部以下8個像素。

反饋讚賞 - 因爲這感覺太離譜/次優這樣一個簡單的事情 - 非常感謝。布朗尼指向黑客/分叉github代碼:) :) :)作爲一行代碼運行超過一千字。

Dw。

回答

1

PSMTabBarControl可能是您的最佳解決方法。我已經創建了幾個自定義選項卡視圖,但可可並沒有很好地使用這個控件。 PSMTabBarControl已更新爲支持Xcode 4. https://github.com/ciaran/psmtabbarcontrol

0

您是否嘗試設置其底層CALayer的背景顏色? (通過設置wantsLayer = YES,使其成爲層次支持的視圖。)

+0

嗯 - 嘗試過(見上文github上的鏈接,https://github.com/dirkx/CustomizableTabView/commit/bfbd5aeecaf13c65611d221a31cb644ed48108d4#diff-7d6a9b4a9a691023219e9dc3082910e6) - 設置以plain.XXX。並沒有cookie。 –

+0

什麼是drawsBackground設置爲?標籤視圖的類型是NSNoTabsNoBorder?你確定NIB甚至在applicationDidFinishLaunching被調用的時候加載了嗎? – dgatwood

+0

當然(並將代碼移動到setColour不會改變行爲)。問題仍然是背景'逃脫'tabview的內容視圖的好處。 –

0

如果您的情況可以容忍一些脆弱性,一個非常簡單和快速的方法是子類NSTabView並手動調整框架項目子視圖。這給每個項目一個無縫的黃色背景:

- (void)drawRect:(NSRect)dirtyRect { 
    static const NSRect offsetRect = (NSRect) { -2, -16, 4, 18 }; 

    NSRect rect = self.contentRect; 

    rect.origin.x += offsetRect.origin.x; 
    rect.origin.y += offsetRect.origin.y; 
    rect.size.width += offsetRect.size.width; 
    rect.size.height += offsetRect.size.height; 

    [[NSColor yellowColor] set]; 
    NSRectFill(rect); 

    [super drawRect:dirtyRect]; 
} 

NSTabView度量未來的變化顯然是一個問題,所以進行風險自負!