您还需要覆盖 -acceptsFirstResponder 以返回 YES。
#pragma mark NSResponder 覆盖
- (BOOL)acceptsFirstResponder
{
返回是;
}
-mouseMoved 事件很昂贵,所以当我的控件的 -mouseExited 消息被调用时我关闭鼠标移动事件并在 -mouseEntered 中打开它。
- (void)mouseEntered:(NSEvent *)theEvent
{
[[自窗口] setAcceptsMouseMovedEvents:YES];
[[自我窗口] makeFirstResponder:self];
}
- (void)mouseMoved:(NSEvent *)theEvent
{
...
}
- (void)mouseExited:(NSEvent *)theEvent
{
[[自我窗口] setAcceptsMouseMovedEvents:NO];
}
我在我的自定义控件应用程序中快速测试了这一点。我在 nib 文件中多次复制了控件,它按预期工作。
您可能还需要:
- (void)awakeFromNib
{
[[自窗口] setAcceptsMouseMovedEvents:YES];
[self addTrackingRect:[self bounds] owner:self userData:NULL assumeInside:YES];
}
我不认为 -setAcceptsMouseMovedEvents 是必要的,但我很确定跟踪 rect 代码是必要的。您可能还需要尝试使用assumeInside: 参数的值,但这已记录在案。