1

我目前正在为 OSX 10.5 及更高版本构建项目。首先,10.6的用户看不到这个;只有 10.5 个用户有这个问题。您无法在 10.6 上重现此内容。

简而言之:当使用 - (void)mouseUp:(NSEvent *)theEvent 的重载实现放置 NSView 的自定义扩展类时,mouseUp 在包裹在 NSSplitView 中时不会被调用。rightMouseUp:/Down: 在扩展的 NSView 上工作。

当我将自定义视图放在我的窗口上时,会调用该事件,当我将它直接包装在 nssplitview 中时,不会为豹(10.5)用户调用 mouseup。

重现步骤(在 10.5 上!)

  1. 创建一个新的可可项目
  2. 创建以下类
  3. 在窗口上拖动一个自定义视图并创建类 GTTest
  4. 在窗口上拖动一个拆分视图,然后在其中一个内容视图中添加一个 GTTest

班级:

@interface GTTest : NSView {
}

#import "GTTest.h"
@implementation GTTest

- (void)mouseUp:(NSEvent *)theEvent {
 NSLog(@"Ger");
}

单击窗口上的 GTTest 目录会记录好行,单击 NSSplitView 则不会执行任何操作(也可以尝试断点)。rightMouseDown:/Up: 在 NSView 上工作。

ps> 当我向 splitview 添加一个按钮时(也是一个派生的 nsview,使用 nsresponder 对吗?)会触发我的 IBAction 方法;我上面的课程缺少什么才能正常工作?

我能做些什么?

4

2 回答 2

1

好的,我找到了解决此问题的方法:

实现 NSSplitView 的扩展类并覆盖方法并在拆分器悬停时“冒泡”事件(可通过光标检测),如果不执行任何操作。这不会导致自定义视图接收到事件。

- (void)mouseUp:(NSEvent *)theEvent {
    if ([NSCursor currentCursor]==[NSCursor resizeLeftCursor] 
        || [NSCursor currentCursor]==[NSCursor resizeRightCursor]
        || [NSCursor currentCursor]==[NSCursor resizeLeftRightCursor]) {
        [super mouseUp:theEvent];
    } 

    if ([NSCursor currentCursor]==[NSCursor resizeUpCursor] 
        || [NSCursor currentCursor]==[NSCursor resizeDownCursor]
        || [NSCursor currentCursor]==[NSCursor resizeUpDownCursor])
    {
        [super mouseUp:theEvent];
    }
}

并使用该类作为拆分视图;突然事件被接收到自定义 NSViews。奇怪但真实!

于 2010-08-12T08:14:24.310 回答
0

我不知道为什么 10.5 和 10.6 在这方面会有所不同,但是您可以尝试覆盖mouseDownCanMoveWindow以返回 NO,如以下问题所示:

NSView 子类中的鼠标单击事件

于 2010-08-12T05:33:35.140 回答