如何防止NSCursor改变?

时间:2018-03-28 20:37:21

标签: swift macos cocoa nsview nscursor

我在尝试阻止光标更改时遇到问题。 我尝试在整个窗口上放置一个覆盖视图,但是,如果在该覆盖下存在NSTextView,这将强制光标改变。我想阻止它,并保持箭头光标,直到我的叠加视图将被删除。

覆盖cursorUpdate方法不起作用......

override func cursorUpdate(with event: NSEvent) {
    return

}

谢谢!

即使this (question 32447739) 答案也无济于事。仅当叠加视图小于TextView时,此解决方案才有效。

enter image description here

1 个答案:

答案 0 :(得分:2)

如果NSTextView是您的,那么您可以通过子类化并覆盖mouseMoved:来获得所需的行为。 There are several examples available, if you search

如果不能选择对文本视图进行子类化,那么最好的方法是使用NSWindow作为叠加层。

  • 使用NSWindowStyleMaskBorderless样式掩码创建窗口。
  • 使窗口不透明,设置alpha,背景颜色
  • 使用addChildWindow:ordered定位叠加层

This answer解释得很清楚。

这样的事情:

var rect = NSRect(x: self.window.frame.origin.x, y: self.window.frame.origin.y, width: self.window.contentView.frame.size.width, height: self.window.contentView.frame.size.height)
var overlay = NSWindow.init(contentRect: rect, styleMask: .borderless, backing: .buffered, defer: false)
overlay.backgroundColor = .red
overlay.isOpaque = false
overlay.alphaValue = 0.5
self.window.addChildWindow(overlay, ordered: .above)

现在,您可以将叠加视图添加为窗口contentView。光标不会响应下面的视图而改变。

请参阅also