5

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

覆盖 cursorUpdate 方法不起作用:

override func cursorUpdate(with event: NSEvent) {
    return
}

谢谢!

即使这个问题的答案也无济于事。此解决方案仅在覆盖视图小于 TextView 时有效。

在此处输入图像描述

4

1 回答 1

2

如果NSTextView是你的,你可以通过继承和覆盖那里获得你想要的行为mouseMoved:如果您搜索,有几个示例可用

如果子类化文本视图不是一个选项,最好的办法是使用NSWindow你的覆盖。

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

这个答案很好地解释了它。

像这样的东西:

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. 光标不会响应下面的视图而改变。

另请参阅

于 2018-04-01T21:02:58.437 回答