NSWindow mouseEntered 没有子类化?

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。

dsp*_*spr 5

您不需要创建视图来执行此操作,您可以使用任何自定义对象,例如您的控制器,作为跟踪方法的一种委托:

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”