Dom*_*old 15 xcode cocoa nsview nswindow osx-lion
我有一个子类NSView是一个子类的的.xib文件的组成部分NSDocument,它通过的默认行为得到活着NSDocumentController的openDocument:方法.在这个子类中,NSView我已经实现了方法awakeFromNib,其中NSWindow setAcceptsMouseMovedEvents:YES调用了view的方法,并且acceptsFirstMouse:返回了该方法YES.但是当我将鼠标移到它上面时mouseMoved:,我的子类的方法实现NSView不会被调用.可能是什么问题?
zee*_*ple 26
请务必请求发送mouseMoved事件:
NSTrackingAreaOptions options = (NSTrackingActiveAlways | NSTrackingInVisibleRect |
NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved);
NSTrackingArea *area = [[NSTrackingArea alloc] initWithRect:[self bounds]
options:options
owner:self
userInfo:nil];
Run Code Online (Sandbox Code Playgroud)
jbo*_*man 11
正如其他人所指出的,NSTrackingArea一个很好的解决方案,安装跟踪区域的适当位置是NSView.updateTrackingAreas().没有必要设置包含NSWindow的setAcceptsMouseMovedEvents属性.
在Swift 3中:
class CustomView : NSView {
var trackingArea : NSTrackingArea?
override func updateTrackingAreas() {
if trackingArea != nil {
self.removeTrackingArea(trackingArea!)
}
let options : NSTrackingAreaOptions =
[.mouseEnteredAndExited, .mouseMoved, .activeInKeyWindow]
trackingArea = NSTrackingArea(rect: self.bounds, options: options,
owner: self, userInfo: nil)
self.addTrackingArea(trackingArea!)
}
override func mouseMoved(with event: NSEvent) {
Swift.print("Mouse moved: \(event)")
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11215 次 |
| 最近记录: |