您還需要重寫-acceptsFirstResponder返回YES。
#pragma mark NSResponder Overrides
- (BOOL)acceptsFirstResponder
{
return YES;
}
-mouseMoved事件是昂貴的,所以我關掉鼠標移動事件被稱爲我的控制的-mouseExited消息時,我把它放在-mouseEntered。
- (void)mouseEntered:(NSEvent *)theEvent
{
[[self window] setAcceptsMouseMovedEvents:YES];
[[self window] makeFirstResponder:self];
}
- (void)mouseMoved:(NSEvent *)theEvent
{
...
}
- (void)mouseExited:(NSEvent *)theEvent
{
[[self window] setAcceptsMouseMovedEvents:NO];
}
我很快在我的自定義控件應用程序中測試了這個。我在nib文件中多次複製控件,並且按預期工作。
您可能還需要:
- (void)awakeFromNib
{
[[self window] setAcceptsMouseMovedEvents:YES];
[self addTrackingRect:[self bounds] owner:self userData:NULL assumeInside:YES];
}
我不認爲-setAcceptsMouseMovedEvents是必要的,但我敢肯定的跟蹤RECT代碼。您可能還需要嘗試使用assumeInside:參數的值,但這是記錄的。
我加的mouseEntered:和的mouseExited:如上述實施它們,但它不調用方法(的NSLog內未顯示)。此外,什麼是#pragma標記NSResponder覆蓋意味着 – cemulate 2009-02-03 02:27:12