我目前正致力于OSX 10.5及更高版本的项目构建。 首先,10.6用户没有看到这一点;只有10.5个用户遇到此问题。 您无法在10.6上重现此内容。
简而言之:当放置一个自定义扩展类的NSView时,重载实现为 - (void)mouseUp:(NSEvent *)theEvent,当它包装在NSSplitView中时,不会调用mouseUp。 rightMouseUp:/ Down:可以在扩展的NSView上工作。
当我将自定义视图放在我的窗口上时会调用该事件,当我将它直接包装在nssplitview中时,不会为leopard(10.5)用户调用mouseup。
重现步骤(10.5!)
类别:
@interface GTTest : NSView {
}
#import "GTTest.h"
@implementation GTTest
- (void)mouseUp:(NSEvent *)theEvent {
NSLog(@"Ger");
}
单击窗口上的GTTest direclty会记录好的行,单击NSSplitView就不会执行任何操作(尝试断点)。 rightMouseDown:/ Up:可以在NSView上运行。
PS>当我向splitview添加一个按钮时(也是一个派生的nsview,使用nsresponder吗?)DOES激活我的IBAction方法;我的班级上面缺少什么才能正常工作?
我该怎么办?
答案 0 :(得分: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];
}
}
并使用该类作为splitview;突然,事件被接收到自定义NSViews。 奇怪但真实!
答案 1 :(得分:0)
我不知道为什么10.5和10.6会在这方面有所不同,但您可能会尝试重写mouseDownCanMoveWindow
以返回NO,如此问题: