【问题标题】:Replacing NSColor with another in NSAttributedString在 NSAttributedString 中用另一个替换 NSColor
【发布时间】:2019-09-09 11:43:51
【问题描述】:

我正在尝试将NSAttributedString 中的一种颜色替换为另一种颜色,以在 Mojave 之前的应用程序中启用暗模式。我有一个很长的NSTextView 来保存字符串。

有什么方法可以重新映射或改变 NSTextView 中已设置的颜色,类似于 Mojave 暗模式对 NSColor.textColor 所做的操作?如果打开了多个文档,通过范围和属性一一枚举来格式化字符串非常慢。

非常感谢使用 Swift 或 Objective-C 的提示和技巧!

【问题讨论】:

    标签: cocoa nsattributedstring nstextview nscolor


    【解决方案1】:

    简答:制作自己的“可适应”颜色。

    长答案

    • 创建一个NSColor 的子类,它有两个只读(与 NSColor 是不可变的)实例NSColor 属性 标准色和深色。

    • 添加类属性以获取/设置应使用的颜色。

    • 定义您自己的 init/new 方法,采用底层标准和深色。

    • NSColor的所有创建方法添加到您的颜色@interface 将它们全部标记NS_UNAVAILBLE - 这可以防止意外使用 他们。

    • 覆盖所有需要的方法 – 请参阅NSColor.h(使用“跳转到 定义”在 Xcode 中打开它)。每个覆盖只是简单地指示 方法为适当的标准或深色。这只是一个 一堆样板代码。

    • 现在使用您的子类为您的NSAttributedString 着色。当你 希望切换模式使用类属性来切换所有颜色 即时重绘你的字符串。

    HTH

    【讨论】:

    猜你喜欢
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 2013-09-06
    • 2012-02-26
    • 2019-02-11
    • 1970-01-01
    相关资源
    最近更新 更多