【问题标题】:Disable all mouse events for NSView禁用 NSView 的所有鼠标事件
【发布时间】:2014-11-28 11:46:47
【问题描述】:

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

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

我的解决方法是覆盖 NSView 的 mouseDown 和 rightMouseDown 事件。这似乎工作正常,但滚动失败。

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

【问题讨论】:

    标签: macos cocoa nsview


    【解决方案1】:

    重写方法:

    - (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];
    

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2011-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多