Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 鼠标向下时禁用鼠标插入事件(NSEvents Mac)_Objective C_Macos_Mouseevent_Nsbutton_Nsevent - Fatal编程技术网

Objective c 鼠标向下时禁用鼠标插入事件(NSEvents Mac)

Objective 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 因此,我想在鼠标按下时检测鼠标何时进入。当鼠标左键按下时,开始拖动。如果我没记错的话,拖

我创建了一个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