我发现了类似的问题(这个),但我的问题似乎与视图层次结构有点联系.
我有一个NSTextView,然后作为兄弟视图,其他几个NSViews.
与上面链接的问题类似,我设置了一个跟踪区域,并将光标应用于:
class CursorChangingView: NSView {
override func updateTrackingAreas() {
let trackingArea = NSTrackingArea(rect:
}
override func cursorUpdate(event: NSEvent) {
NSCursor.arrowCursor().set()
}
}
Run Code Online (Sandbox Code Playgroud)
它似乎在悬停时起作用,但会立即返回到IBeam Cursor,它是此CursorChangingView下NSTextViews的默认光标.
这是在鼠标悬停在某个NSView上时应用更改光标的正确方法吗?它下面的NSTextView是否覆盖了我的覆盖?
您只需要子类化自定义视图,覆盖awakeFromNib方法,为[.mouseMoved,.activeAlways]事件添加自定义跟踪区域:NSTrackingArea Info.无需覆盖resetCursorRects和/或updateTrackingAreas.您只需要覆盖mouseMoved方法并在那里设置所需的光标:
请注意 discardCursorRects方法的说明:
来自文档
您永远不需要直接调用此方法
Xcode 9•Swift 4
import Cocoa
class CursorChangingView: NSView {
override func awakeFromNib() {
addTrackingArea(NSTrackingArea(rect: bounds, options: [.activeAlways, .mouseMoved], owner: self, userInfo: nil))
wantsLayer = true
layer?.backgroundColor = NSColor.cyan.cgColor
layer?.borderColor = NSColor.black.cgColor
layer?.borderWidth = 1
}
@objc override func mouseMoved(with theEvent: NSEvent) {
NSCursor.pointingHand.set()
}
}
Run Code Online (Sandbox Code Playgroud)