How to get the source lists selection highlight to use the Dark Vibrancy appearance in OS X 10.10?

前端 未结 4 1068
走了就别回头了
走了就别回头了 2020-12-28 22:20

In OS X 10.10 source lists seem to use the light vibrancy appearance. In the Finder (and in some other third party applications, Things.app for example) the selecte

相关标签:
4条回答
  • 2020-12-28 22:27

    After playing around for a while I found a way to accomplish this. It turned out that I would get the "Finder highlight" style when using NSTableViewSelectionHighlightStyleSourceList and clicking outside my NSOutlineView. So I figured it would stay that way if you refuse making it first responder.

    Simply make your NSOutlineView a subclass and override this method:

    -(BOOL)acceptsFirstResponder{
        return NO;
    }
    

    It works, but with some downsides. For example, using arrow keys in the NSOutlineView will no longer work. I downloaded the Things app, and it does not allow use of arrow keys either, so it's very likely that this is how they are doing it. If anyone finds a better way, please post it.

    0 讨论(0)
  • 2020-12-28 22:28

    I am not sure, this is "Dark Vibrancy".

    I would rather try setting the background color to something like "Alternate Selected Control Text Color"

    Have a look at an NSTextField in InterfaceBuilder. there are many "Control Text" colors, which have a special appearance on visual effect views.

    and for setting the selection color see this answer (untested): NSTableview Change the highlight colour

    0 讨论(0)
  • 2020-12-28 22:34

    If you would like to keep arrow keys working, you can subclass NSTableRowView and override the following method:

    - (BOOL)isEmphasized
    {
        return NO;
    }
    
    0 讨论(0)
  • 2020-12-28 22:54

    Here is the Swift equivalent :

    func outlineView(_ outlineView: NSOutlineView, rowViewForItem item: Any) -> NSTableRowView? {
        return CustomTableRowView(frame: NSZeroRect);
    }
    

    And the subclass of NSTableRowView

    import Cocoa
    
    class CustomTableRowView: NSTableRowView {
    
        override var isEmphasized: Bool {
            set {}
            get {
                return false;
            }
        }
    
    }
    
    0 讨论(0)
提交回复
热议问题