我正在開發一個桌面應用程序,其中我想更改NSWindow標題欄的顏色。我該如何做到這一點?更改NSWindow標題欄的顏色
回答
NSWindow的內容視圖有一個superview,它是NSThemeFrame的一個實例。該類負責繪製標題文本,窗口/工具欄背景紋理,並且它包含其他所有內容(關閉按鈕,全屏按鈕,NSDocument圖標等)的子視圖。
您可以使用Objective-C運行時用您自己的方法替換NSThemeFrame的drawRect:方法,該方法將調用父實現,然後在其上執行自定義繪圖。
還有一個私人的方法來找到標題繪製的矩形和NSFont上的公共方法來找到它的字體和字體大小。
我所做的是將窗口背景顏色設置爲純色(黑色)而不是漸變/紋理,然後將其設置爲「紋理」窗口(這會導致背景顏色實際呈現,否則它不會發生),然後在我知道標題已經繪製的區域的標題欄上繪製一個黑色方塊,然後在它的位置繪製我自己的標題,使用淺灰色而不是深灰色。
源代碼是在這裏:https://github.com/abhibeckert/Dux/blob/master/Dux/DuxProjectWindow.m(注:它只做一個自定義標題文字的顏色,如果DUX_DARK_MODE == 1)
這樣做可能會得到來自Mac App Store的封鎖您的應用程序,但它是相當可靠。只要確保你與OS X的每一個新的主要版本
它使用私有方法測試,但工作原理:
NSEnumerator *viewEnum = [[[[[[window contentView] superview] titlebarViewController] view] subviews] objectEnumerator];
NSView *viewObject;
while(viewObject = (NSView *)[viewEnum nextObject]) {
if([viewObject className] == @"NSTextField") [viewObject setTextColor: .. your color .. ];
}
你如何強制Xcode接受私有方法的使用?我試圖效仿你使用Swift建議,它只是抱怨說「視圖沒有名爲titlebarViewController的成員」。 – Sam 2015-01-19 19:30:18
嘗試將viewObject轉換爲NSTextField ...雖然 – 2015-04-16 07:00:07
要改變窗口的工具欄的顏色:
- 套裝窗口樣式在屬性檢查器中構造。
- 在代碼:
[window setBackgroundColor: MyCustomColor];
仍然不適用於我的應用程序,但這對我來說很合適,而且非常簡單! – Volomike 2016-01-09 20:52:33
- 1. 更改NSWindow標題文本的顏色
- 2. 更改顏色標題欄
- 3. 更改WinForm中標題欄的顏色
- 4. 更改NSWindow邊框顏色
- 5. 更改操作欄標題顏色
- 6. 更改WPF標題欄背景顏色
- 7. flexdashboard - 更改標題欄顏色
- 8. 如何使用lwuit更改標題欄中的標題顏色?
- 9. 更改頂欄顏色和標籤欄文字顏色
- 10. 更改GridViewColumn標題顏色
- 11. 更改標籤欄的背景顏色
- 12. 如何更改無主題的標題欄顏色
- 13. 黑色導航欄標題顏色可以更改嗎?
- 14. 的JProgressBar更改欄顏色
- 15. Nimbus更改標籤標題的顏色
- 16. 更改狀態欄圖標顏色
- 17. 更改標籤欄項目標題和顏色programmaticaly
- 18. 更改UITableView標題色調顏色
- 19. 更改MFMailComposeViewController的標題欄,背景和文本的顏色
- 20. 如何更改框架「JAVAFX」中的標題欄的顏色?
- 21. 如何更改jquery datepicker中的標題顏色欄?
- 22. 更改鍵盤工具欄的標題顏色objective-C
- 23. 更改標題欄的顏色和按鈕
- 24. 更改窗口標題欄中圖像的顏色
- 25. 無法更改導航欄標題的文本顏色
- 26. 更改mfc應用程序的標題欄顏色
- 27. 是否可以更改JFrame或JInternalFrame的標題欄顏色
- 28. ActionScript:更改火花TitleWindow的標題欄顏色
- 29. 使用VBA更改Excel應用程序的標題欄顏色
- 30. 如何更改Android中工具欄標題的顏色?
你可能想簽出以下問題: http://stackoverflow.com/questions/1665147/how-to-custom-draw-window-title-bar-in- objective-c/1665421#1665421 – Leibowitzn 2010-06-15 18:14:12
我發佈了答案。檢查我的[在這裏回答](http://stackoverflow.com/a/20016023/2515572) – 2013-11-16 07:35:18