如何在Cocoa中处理窗口内的mousedown事件

时间:2011-03-30 21:04:28

标签: objective-c cocoa events mouseevent

如何处理Cocoa中窗口内的mousedown事件?

我的代码:

-(void)mouseDown:(NSEvent *)event {
    NSLog(@"yay");
}    

我在xcode 4.0.1中使用的是Mac OS10.6。

编辑: 是的,这是在app委托中,但这是我的.h:

@interface jumperAppDelegate:NSWindow {

我以前在app委托中所做的事情(仅适用于鼠标事件)。这真让我讨厌

3 个答案:

答案 0 :(得分:6)

确保您继承NSWindow,并符合<NSWindowDelegate>协议。像这样:

@interface YourWindow : NSWindow <NSWindowDelegate> {}
@end

然后你应该收到事件通知。

-(void)mouseDown:(NSEvent *)event {    
}

答案 1 :(得分:2)

对于要调用的类,要调用的类需要从NSResponder继承。 Windows和视图都是NSResponder的子类。如果您调用此类的类不是NSResponder的子类,则该方法将不会触发。

*更新* 还要确保覆盖acceptFirstResponder以返回yes。

- (BOOL)acceptsFirstResponder {
   return YES;
}

答案 2 :(得分:0)

我不确定,但我听说你的头文件(.h)中需要用“NSWindow”替换“NSObject”。我会测试它,但我现在不在我的电脑上。

另外,请确保将以下代码放入头文件中:

- (void) mouseDown:(NSEvent*)event;
编辑:我做了一些测试和研究,但我无法让它发挥作用。我有两个提示。

  • 使用'-acceptsFirstMouse方法。

  • 尝试创建NSEvent:

    NSEvent * someEvent; - (无效)鼠标按下:(NSEvent *)someEvent;

这可能不起作用,但我会提供更多信息来管理