如何在Swift OS X应用程序中更改NSWindow的标题颜色?

时间:2015-03-28 23:54:20

标签: macos swift colors title nswindow

我尝试了很多东西,但没有任何作用......而且NSWindow也不会接受NSAttributedString。如何更改窗口标题的颜色?

1 个答案:

答案 0 :(得分:1)

这是Swift的解决方案。已经很晚了,我很累,所以这可能不是最佳的,但它确实有效。

首先,这是一个在层次结构中查找视图的功能,可以选择跳过特定视图。 (如果我们要搜索window.contentView.superview.subviews并且我们想在contentView中忽略您自己的观点

,这会非常有用
func findViewInSubview(subviews: [NSView], #ignoreView: NSView, test: (NSView) -> Bool) -> NSView? {
    for v in subviews {
        if test(v) {
            return v
        } else if v != ignoreView {
            if let found = findViewInSubview(v.subviews as [NSView], ignoreView: ignoreView, test) {
                return found
            }
        }
    }
    return nil
}

以下是您将如何使用它,例如来自NSViewController子类。请注意,您需要在窗口可见时执行此操作,因此您无法在viewDidLoad中执行此操作。

override func viewDidAppear() {
    if let windowContentView = view.window?.contentView as? NSView {
        if let windowContentSuperView = windowContentView.superview {
            let titleView = findViewInSubview(windowContentSuperView.subviews as [NSView], ignoreView: windowContentView) { (view) -> Bool in
                // We find the title by looking for an NSTextField. You may
                // want to make this test more strict and for example also
                // check for the title string value to be sure.
                return view is NSTextField
            }
            if let titleView = titleView as? NSTextField {
                titleView.attributedStringValue = NSAttributedString(string: "Hello", attributes: [NSForegroundColorAttributeName: NSColor.redColor()])
            }
        }
    }
}

请注意你正在玩火。像这样的内部结构是没有说明的原因。