Objective c 鼠标向下时禁用鼠标插入事件(NSEvents Mac)
我创建了一个NSButton类,当滚动我的按钮时,它会检测到mouseEntered和mouseExited事件。但是一旦mouseDown事件发生,只要鼠标按下,mouseenterned事件就不再被调用,直到鼠标按钮被提起 因此,当调用mouseDown事件时,mouseEntered或MouseExited事件将不再被调用,滚动其他按钮时也不会调用mouseDown,直到我放弃最初的mouseDownObjective c 鼠标向下时禁用鼠标插入事件(NSEvents Mac),objective-c,macos,mouseevent,nsbutton,nsevent,Objective C,Macos,Mouseevent,Nsbutton,Nsevent,我创建了一个NSButton类,当滚动我的按钮时,它会检测到mouseEntered和mouseExited事件。但是一旦mouseDown事件发生,只要鼠标按下,mouseenterned事件就不再被调用,直到鼠标按钮被提起 因此,当调用mouseDown事件时,mouseEntered或MouseExited事件将不再被调用,滚动其他按钮时也不会调用mouseDown,直到我放弃最初的mouseDown 因此,我想在鼠标按下时检测鼠标何时进入。当鼠标左键按下时,开始拖动。如果我没记错的话,拖
因此,我想在鼠标按下时检测鼠标何时进入。当鼠标左键按下时,开始拖动。如果我没记错的话,拖动过程中不会发送鼠标移动事件,这可能是您没有收到
mouseEntered
和mouseExited
消息的原因之一。但是,如果实现NSDraggingDestination
协议并将视图注册为可能的数据类型的接收者,则将得到dragginged
和draggingexit
消息
在拖放编程主题一节中阅读相关内容。当一个
NSButton
接收到鼠标按下事件时,它会输入一个,处理所有已发布的鼠标事件,直到它得到一个鼠标。您可以根据鼠标位置设置自己的跟踪循环:
- (void) mouseDown:(NSEvent *)event {
BOOL keepTracking = YES;
NSEvent * nextEvent = event;
while( keepTracking ){
NSPoint mouseLocation = [self convertPoint:[nextEvent locationInWindow]
fromView:nil];
BOOL mouseInside = [self mouse:mouseLocation inRect:[self bounds]];
// Draw highlight conditional upon mouse being in bounds
[self highlight:mouseInside];
switch( [nextEvent type] ){
case NSLeftMouseDragged:
/* Do something interesting, testing mouseInside */
break;
case NSLeftMouseUp:
if( mouseInside ) [self performClick:nil];
keepTracking = NO;
break;
default:
break;
}
nextEvent = [[self window] nextEventMatchingMask:NSLeftMouseDraggedMask | NSLeftMouseUpMask];
}
}
原来我只需要将NSTrackingEnabledDuringMouseDrag添加到我的NSTrackingArea选项中。鼠标启动和鼠标退出事件现在在鼠标向下拖动时触发。我不太确定如何启动。它非常专注于拖动不同的数据类型。我没有拖动任何数据。我只想检测鼠标何时进入一个新视图(在nsbuttons上拖动鼠标)。在您的问题中提到您使用的是
NSTrackingArea
,这可能是一个好主意。这仍然对我有帮助。嗯,这对我不起作用。我正在使用nstrackingMouseentered并退出| nstrackingActivatealways | NSTrackingEnabledDuringMouseDrag
。