微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

xcode – 如何反转所选NSTableView行的文本颜色

我有一个NSTableView,我在其中更改特定列中文本的颜色,但是当选择一行时,文本不会更改为更合适的颜色,以便它可读.

Finder的Date Modified,Size和Kind列具有灰色文本,当您选择文件/文件夹行时,灰色文本将变为白色(以便在蓝色突出显示中可读).

我无法在XCode上找到一个魔术复选框来认启用此行为,所以是否有人知道如何实现相同的效果

我在XCode 6.3中使用Swift.

谢谢.

解决方法

您没有说明您为单元格使用的视图或视图层次结构.您也没有说明如何或在何处设置文本字段的颜色或具体颜色.

选择行时,该行会自动计算其interiorBackgroundStyle.如果它响应-setBackgroundStyle,它还设置单元格视图的backgroundStyle:或者是一个NSControl,其中一个单元格响应该单元格.

如果您的单元格视图是NSTableCellView的实例,它会将背景样式转发到符合相同条件的所有子视图.如果您使用不同的容器视图作为单元格视图,并且希望像这样转发背景样式,则必须在视图类中自己实现.

NSTextField的单元格(NSTextFieldCell)响应-setBackgroundStyle:因此上述机制自动设置其背景样式.如果textColor是其中一种标准控件颜色(例如NSColor.controlTextColor()),则文本字段单元格将自动将其文本颜色更改为白色,但如果指定非标准颜色,则不会这样做.因此,如果您要为文本设置特定颜色,则您有责任在背景样式更改时更改该颜色.

您可以使用NSTableCellView的子类,并为backgroundStyle属性添加属性observer(didSet).这可以根据设置的样式更改文本字段的textColor.例如,如果背景样式不是.Dark,则可以使用自定义颜色,如果是.Dark,则使用普通文本字段颜色NSColor.controlTextColor()(这样文本字段实际上将显示为白色).

您还可以使用NSTextFieldCell的子类作为文本字段,并执行相同的操作.或者覆盖drawInteriorWithFrame(_:inView :)以根据背景样式使用不同的文本颜色进行绘制.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐