单击时如何不突出显示 NSButton 的模板图像?

2023-11-25

我在 NSTableView 的每一行都有 NSButtons。

按钮图像在 IB 中设置,并且带 Alpha 通道的黑色图标:

enter image description here

窗口设置为暗模式:

window?.appearance = NSAppearance(named: NSAppearanceNameVibrantDark)

并进入正常模式:

window?.appearance = nil

目标是当窗口为白色时按钮应为黑色,当窗口为暗时按钮应为白色,单击时不改变。

在深色模式下,为了实现颜色变化,我在 NSTableCellView 子类中将按钮的图像“template”属性设置为 true:

public override func awakeFromNib() {
    if darkMode {
        button.image?.isTemplate = true
    } else {
        button.image?.isTemplate = false
    }
} 

IB 中的按钮是这样制作的:

enter image description here

这在 macOS 10.12 Sierra 中效果很好:当窗口为白色时,单击黑色按钮不会改变其外观,这是完美的。

但是当窗口变暗时,单击白色按钮会使窗口变黑,这在我的情况下是不可接受的(*)。此外,模板图像在 macOS 10.11 El Capitan 中不起作用。

Ok:

enter image description here

点击了,不行:

enter image description here

再次单击变黑的按钮使其再次变白......

我的问题是:如何强制 NSButton 在单击时不突出显示模板图像?

我认为这是因为“瞬时更改”类型,但使用其他“瞬时”类型不会改变任何内容,而且我也无法将类型设置为“自定义”(IB 拒绝)。

请注意,与 macOS 10.12 相比,这些模板图像在 macOS 10.11 中的行为有所不同。在 Sierra 中无缝运行的设置组合在 El Capitan 中不起作用。这也是我设置赏金的原因:我需要一个适用于两个系统的解决方案。如果没有解决方案并且您知道原因,那么您的解释也将是一个可以接受的答案。

(*) 在 Sierra 上可以使用模板图像工作的解决方法,方法是使用use button.cell?.setCellAttribute(.cellLightsByContents, to: 0)阻止按钮在单击时明确改变颜色(尽管仍然有短暂的闪烁)。但在 El Capitan 中,该按钮在深色模式下为黑色,因此这不适用。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单击时如何不突出显示 NSButton 的模板图像? 的相关文章

随机推荐

  • 在字符串数组项元素中搜索字符串

    如何在字符串数组项元素内搜索特定文本 以下是 xml 文件的示例 字符串数组名称是 android 我在字符串数组中有一些项目 现在我想搜索 软件 这个词 请告诉我该怎么做
  • C# - 以编程方式推进 Powerpoint 幻灯片放映的方法?

    我希望能够通过按 Windows 窗体中的按钮来推进 Powerpoint 演示文稿 这是我找到的一些代码http bytes com topic c sharp answers 272940 open powerpoint present
  • LINQ to SQL 中的 Guid 类型和(“>”大于比较)

    请帮我 我尝试比较 Where 查询方法中的两个 guid 但我得到编译错误 错误 1 运算符 gt 不能应用于 System Guid 和 System Guid 类型的操作数 Guid startUser Here I get user
  • 克隆存储闭包的结构[重复]

    这个问题在这里已经有答案了 我目前正在尝试用 Rust 实现一个简单的解析器组合器库 为此我想要一个通用的map转换解析器结果的函数 问题是我不知道如何复制持有闭包的结构 一个例子是Map以下示例中的结构体 它有一个mapFunction存
  • 如何链接到 intersphinx 中的根页面

    我已启用sphinx ext intersphinx在我的项目中并添加了以下配置 intersphinx mapping python https docs python org 3 None pyserial https pythonho
  • symfony2:如何在翻译中包含换行符/换行符?

    我该如何在 Symfony 2 4 中获得换行符 messages de yml foo Hello i am a line Hello i am a new line and messages de yml foo gt Hello i
  • 处理取消令牌源的正确模式

    考虑这样一个场景 您需要完成一些异步工作 并且可以在即发即忘模式下运行它 此异步工作能够侦听取消 因此您可以向其传递取消令牌以便能够取消它 在给定时刻 我们可以决定通过使用从中获取取消令牌的取消令牌源对象来请求取消正在进行的活动 因为取消令
  • 所有子类的 C++ 模板专门化

    我需要创建一个像这样的模板函数 template
  • 如何在 Rails 中发现模型属性?

    我发现很难轻松地查看所有模型类中存在哪些属性 属性 因为它们没有在我的类文件中明确定义 为了发现模型属性 我保持 schema rb 文件打开 并在它和我根据需要编写的任何代码之间切换 这可以工作 但很笨重 因为我必须在读取架构文件以获取属
  • Google 地图 api-3:更改多边形的默认光标

    例如 我可以更改地图的draggableCursor 但即使我更改它 多边形的光标仍然是指针 因为地图位于多边形后面 我想将多边形的光标设置为 移动 以便明确多边形是可拖动的 更改多边形光标的正确方法是什么 有一个属性或方法可以做到这一点吗
  • 在 ASP.NET Core 中使用防伪 cookie,但使用非默认 CookieName

    我正在考虑更改 ASP NET Core 中默认防伪 cookie 的名称 我想更改 cookie 名称的原因是为了使 cookie 匿名化 在我看来 最终用户没有理由能够确定此 cookie 的责任 Microsoft AspNetCor
  • 如何使用 JSF2 处理多态性?

    我需要显示 编辑多态实体 我的抽象类是Person 我的具体课程是自然人 and 有道德的人 每个具体类都有自己的自定义属性 如何根据实体类使用适当的显示 编辑 复合 组件 谢谢 不存在这样的事情instanceof在EL 但是 您可以 a
  • NHibernate 通过代码映射 (Loquacious) - 级联选项

    我对使用 NHibernate 按代码映射时的级联枚举选项行为有疑问 枚举有以下选项 Flags public enum Cascade None 0 Persist 2 Refresh 4 Merge 8 Remove 16 Detach
  • 如何根据类别计数过滤数据框

    如何对数据帧进行子集化 以便仅包含包含其值在其他行中显示一定次数的列的行 例如 如果我有一个标记为 食物 的列 我将如何过滤掉在整个数据框中出现少于 5 次的食物的所有行 这是一个简单的例子 dat lt data frame x runi
  • v8 |手动启动垃圾收集器

    有没有办法在 Google V8 引擎上手动启动垃圾收集器 我找不到任何参考 通常GC都支持这个功能 你可以暴露v8 HEAP gt CollectAllGarbage函数到 通过命令标志的全局 JavaScript 命名空间 expose
  • Linux 系统的 OPEN_MAX 在哪里定义?

    OPEN MAX是定义单个程序允许的最大打开文件数的常量 According to Beginning Linux Programming 4th Edition Page 101 该限制通常由 limit h 中的常量 OPEN MAX
  • Laravel RoleMiddleware,未找到类角色

    我正在尝试添加一个简单的中间件来检查用户是否与角色匹配 当我使用中间件时遇到问题 出现异常 ReflectionException 类角色不存在 我不会尝试调用名为 role 的类 因此我认为这在 Laravel 的某个地方神奇地发生了 我
  • 我的 javascript webApp 首先读取一个短的 mp3 文件并在其中找到静音间隙 用于导航目的 然后播放相同的 mp3 文件 提示它从一个静音或另一个静音结束的位置开始 这与通常的 webAudio 场景不同 通常的 webAu
  • 无法在 PHP 中连接 2 个数组

    我最近学习了如何在 PHP 中使用 运算符连接 2 个数组 但考虑一下这段代码 array array Item 1 array array Item 2 var dump array 输出是 数组 1 0 gt 字符串 6 项目 1 为什
  • 单击时如何不突出显示 NSButton 的模板图像?

    我在 NSTableView 的每一行都有 NSButtons 按钮图像在 IB 中设置 并且带 Alpha 通道的黑色图标 窗口设置为暗模式 window appearance NSAppearance named NSAppearanc