禁用NSView的所有鼠标事件

时间:2014-11-28 11:46:48

标签: macos cocoa nsview

如何禁用所有鼠标事件到特定的NSView(及其所有子视图)

例如:在下面的图像中, 我有一个scrollView和一个边框视图(比如MyBorderView) 我想要实现的功能是禁用所有鼠标事件以在按下按钮时滚动视图。

我对它的修复是覆盖NSView的mouseDown和rightMouseDown事件。这似乎工作正常,但滚动失败。

简单来说,我想实现一些像[_scrollView disableAllMouseEvents]

这样的东西

enter image description here

1 个答案:

答案 0 :(得分:0)

覆盖方法:

- (void)scrollWheel:(NSEvent *)theEvent;

例如,您有一个布尔变量disableEvents,用于在滚动视图中启用或禁用事件。代码将是:

- (void)scrollWheel:(NSEvent *)theEvent
{
    // No disable events ---> disableEvents = NO
    if (!disableEvents) {
        [super scrollWheel:theEvent];
    }
}

如果设置disableEvents = YES,则会禁用滚动。另一方面,您也需要禁用滚动条,或者滚动可以移动它们:

[self setHorizontalScroller:nil];
[self setVerticalScroller:nil];

如果您以后需要反转滚动条,只需写下:

NSScroller *scrollerHorizontal = [[NSScroller alloc]init];
NSScroller *scrollerVertical = [[NSScroller alloc]init];

[self setHorizontalScroller:scrollerHorizontal];
[self setVerticalScroller:scrollerVertical];
祝你好运!