sr3*_*sr3 3 macos cocoa objective-c appkit
我有一个程序接受 NSWindow 的本机窗口句柄(已创建但尚未可见)。我这样做是为了更改一些本机窗口样式和行为。我可以做我需要做的一切,除了我无法让 mouseEnter/mouseExit 工作,因为它似乎需要在实例化之前进行子类化。有没有解决的办法?我真的不想连续轮询鼠标位置只是为了检测窗口一部分的 mouseEnter 和 mouseExit 。
注意:我必须这样做,因为我想在窗口未聚焦时检测悬停。
我可以附加跟踪区域,但如果不对其进行子类化,我不确定如何挂钩事件:
NSTrackingArea *area = [[NSTrackingArea alloc] initWithRect:CGRectMake(0, 0, 120, 300) options:NSTrackingMouseEnteredAndExited | NSTrackingInVisibleRect | NSTrackingActiveAlways owner:window userInfo:nil];
[window.contentView addTrackingArea:area];
Run Code Online (Sandbox Code Playgroud)
PS:如果有帮助的话,我愿意使用 C 或 Swift。
您不需要创建视图来执行此操作,您可以使用任何自定义对象,例如您的控制器,作为跟踪方法的一种委托:
NSView * theView = window.contentView;
NSTrackingArea *area = [[NSTrackingArea alloc] initWithRect: theView.bounds
options:(NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved | NSTrackingActiveAlways)
owner:myController //<-- your controller
userInfo:nil];
[theView addTrackingArea:area];
Run Code Online (Sandbox Code Playgroud)
从那里,跟踪方法将被发送到“myController”
| 归档时间: |
|
| 查看次数: |
453 次 |
| 最近记录: |