gpt4 book ai didi

cocoa - 源自背景 NSView 的错误 NSCursor

转载 作者:行者123 更新时间:2023-12-03 17:10:01 26 4
gpt4 key购买 nike

我想更改 cocoa 应用程序中的光标。我按照 this answer 中的示例进行操作,成功了。

我有一个 NSView,我们称之为 NSViewA,位于另一个 NSView NSViewB 后面。 NSViewA 包含一个子类 NSButton,其中光标已更改。 NSViewANSViewB 具有相同的 super View 。所以像这样:

- NSWindow
- NSViewA
- NSButtonSubclass
- NSViewB

我的问题是,当显示 NSViewB 时,光标位于 NSViewB 之上,但与 NSButton 的 x y 坐标相同在 NSViewB 后面,光标更改为 NSButton 子类中指定的光标。

如何阻止这种行为?

这种布局的原因是我正在创建一个“灯箱”控件。如果您认为 NSWindow 会变灰,并且出现一个显示错误消息的居中框。诸如此类的事情。

我以前遇到过一个问题,您仍然可以单击 NSViewB 后面的按钮等。通过抑制 mouseDown:mouseUp: 解决了这个问题。我尝试对其他与鼠标相关的事件执行类似的操作,例如 mouseEntered:mouseExited: 但没有成功。

最佳答案

您能否根据按钮的启用状态来添加自定义光标矩形?换句话说,您的 resetCursorRects 看起来像这样:

// MyButton.swift
override func resetCursorRects() {
if enabled {
addCursorRect(bounds, cursor: NSCursor.pointingHandCursor())
}
}

每当 viewB 即将显示时,禁用该按钮,并调用使属于按钮的矩形无效。如果您使用 Swift,则可以在附加到 enabled 属性本身的属性观察器中执行第二位操作:

// MyButton.swift
override var enabled: Bool {
didSet {
window!.invalidateCursorRectsForView(self)
}
}

如果您不希望按钮呈现禁用外观,请根据其他标志进行addCursorRect调用。

关于cocoa - 源自背景 NSView 的错误 NSCursor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36360102/

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