gpt4 book ai didi

swift - 按下时 NSButton 变为灰色

转载 作者:行者123 更新时间:2023-11-28 10:13:29 24 4
gpt4 key购买 nike

我有一个带有图像的 NSButton。按下时整个单元格变成灰色。如何防止这种情况?有几篇关于这个主题的帖子。但他们中的大多数都只有 10 岁。最近的一个在这里:NSButton background transparent after getting focus

据此,我尝试使用以下代码:

class overviewImageButton: NSButton {

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}

convenience init(appearance: NSAppearance) {
self.init(appearance: appearance)

self.appearance = NSAppearance(named: NSAppearanceNameAqua)
}

override func draw(_ dirtyRect: NSRect) {

self.image = NSImage(named: "buttonImage.png")

super.draw(dirtyRect)

NotificationCenter.default.addObserver(forName: windowChanged, object: nil, queue: nil) {
notification in
self.image = NSImage(named: "buttonImage_highlighted.png")
}
}
}

但它不起作用。按钮单元在按下时仍会变成灰色。感谢您的帮助!

最佳答案

Willeke 已经说过很多了和 I'L'I ,所以功劳归于他们。

Willeke 说的:

永远不要draw() 中做任何事情,除了绘图。这个方法可以在屏幕刷新时被调用。因此,目前您基本上是在真的经常尝试将自己添加为 notificationCenter 的观察者。

以下是您可以执行的操作:编写一个 setup() 方法并从每个初始化程序中调用它。它们中的任何一个都会为按钮实例调用一次。

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.setupButton()
}

override init(frame frameRect: NSRect) {
super.init(frame: frameRect)
self.setupButton()
}

private func setupButton() {
self.image = NSImage(named: "buttonImage.png")

NotificationCenter.default.addObserver(forName: .windowChanged, object: nil, queue: nil) {
notification in
self.image = NSImage(named: "buttonImage_highlighted.png")
}
}

您不需要在此处添加 init(frame:) 初始化程序。对于 Storyboard,init(coder:) 一个就足够了。无论如何我都添加了它,因为您可能想以编程方式初始化按钮。你通常在那里使用 init(frame:) 方法。如果您添加便捷方法,请确保也在那里调用 setup() 方法。

我说的是:重要的事情:我为抑制 mouseDown 上的灰色背景所做的是在调用 super.draw(rect) 之前简单地调用 isHighlighted = false

override func draw(_ dirtyRect: NSRect) {
self.isHighlighted = false

super.draw(dirtyRect)
}

奖励:我看到你在某个地方定义了一个 Notification.Name。您可以在 Notification.Name 的项目全局扩展中定义所有这些,如下所示:

extension Notification.Name {
static let windowChanged = Notification.Name(rawValue: "WindowChangedNotification")
}

之后你可以像系统通知名称一样在任何地方使用它们。

关于swift - 按下时 NSButton 变为灰色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44729788/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com