问题
I have a problem while I try to prevent a cursor from changing. I try to put an overlay View over entire window, but, if under that overlay exist an NSTextView, this will force cursor to change. I want to prevent that, and keep the arrow cursor until my overlay view will be removed.
Overriding the cursorUpdate method does not work...
override func cursorUpdate(with event: NSEvent) {
return
}
Thanks!
Even this (question 32447739) answer does not help. This solution is valid only if the overlay view is smaller than TextView.
回答1:
If the NSTextView
is yours, you can get the behaviour you want by subclassing and overriding mouseMoved:
there. There are several examples available, if you search.
If subclassing the text view is not an option, the best thing would be to use an NSWindow
for your overlay.
- Create the window with the
NSWindowStyleMaskBorderless
style mask. - Make the window opaque, set the alpha, background color
- Use
addChildWindow:ordered
to position your overlay
This answer explains it quite well.
Something like this:
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)
Now you can add your overlay view as the window's contentView
. The cursor will not change in response to the views below.
See also.
来源:https://stackoverflow.com/questions/49543750/how-to-prevent-a-nscursor-from-change