我想在我的cocoa应用程序中更改光标。我已经跟随this answer中的示例,并取得了成功。
我有一个NSView
,我们称之为NSViewA
,在另一个NSView
,NSViewB
后面。 NSViewA
包含已更改游标的子类NSButton
。 NSViewA
和NSViewB
具有相同的超级视图。所以像这样:
- NSWindow
- NSViewA
- NSButtonSubclass
- NSViewB
我的问题是,当显示NSViewB
时,光标位于NSViewB
的顶部,但是在NSButton
后面的NSViewB
的相同xy坐标中,光标对NSButton
子类中指定的更改。
如何停止此行为?
这种布局的原因是我正在创建一个“灯箱”控件。如果您认为NSWindow
的某些内容会变灰,并且会出现一个显示错误消息的居中框。那种事。
我以前遇到过一个问题,你仍然可以点击NSViewB
后面的按钮等。这是通过抑制mouseDown:
和mouseUp:
来解决的。我尝试过与其他与鼠标相关的事件做类似的事情,例如mouseEntered:
和mouseExited:
没有运气。
答案 0 :(得分:1)
您是否可以根据按钮的enabled
状态添加自定义光标矩形?换句话说,您的resetCursorRects
将如下所示:
// MyButton.swift
override func resetCursorRects() {
if enabled {
addCursorRect(bounds, cursor: NSCursor.pointingHandCursor())
}
}
每当要显示viewB
时,请禁用该按钮,并呼叫属于您的按钮的rects无效。如果您正在使用Swift,则可以在附加到enabled
属性本身的属性观察器中执行此操作:
// MyButton.swift
override var enabled: Bool {
didSet {
window!.invalidateCursorRectsForView(self)
}
}
如果您不希望自己的按钮采用已禁用外观,请将addCursorRect
来电视为其他标志。