gpt4 book ai didi

macos - 在 NSTextView 上方更改 NSView 的 NSCursor

转载 作者:搜寻专家 更新时间:2023-10-30 23:02:10 40 4
gpt4 key购买 nike

发现了一个与我类似的问题(this) ,但我的问题似乎与 View 层次结构有关。

我有一个 NSTextView,然后作为兄弟 View ,在它上面有几个其他 NSView。

与上面链接的问题类似,我设置了一个跟踪区域,并这样应用了光标:

class CursorChangingView: NSView {
override func updateTrackingAreas() {
let trackingArea = NSTrackingArea(rect:
}

override func cursorUpdate(event: NSEvent) {
NSCursor.arrowCursor().set()
}
}

悬停时似乎确实有效,但立即返回到 IBeam Cursor ,这是此 CursorChangingView 下 NSTextViews 的默认光标。

当悬停在某个 NSView 上时,这是应用更改光标的正确方法吗,它下面的 NSTextView 是否覆盖了我的覆盖?

最佳答案

所有你需要的是子类化自定义 View ,覆盖 awakeFromNib 方法,为 [.mouseMoved, .activeAlways] 事件添加自定义跟踪区域:NSTrackingArea Info那里。无需覆盖 resetCursorRects 和/或 updateTrackingAreas。您只需要覆盖 mouseMoved 方法并在那里设置所需的光标:

关于 discardCursorRects 方法的注意事项:

来自文档

You need never invoke this method directly

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()
}
}

Sample

关于macos - 在 NSTextView 上方更改 NSView 的 NSCursor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32447739/

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