Objective-C中的Mouse Down事件

我知道这个问题之前已被问过很多,但没有什么能对我有用。以下代码根本不会做任何事情。
- (void) mouseDown:(NSEvent*)event {
    NSLog(@"It worked!");

}
我尝试了很多不同的方法来实现这一点,包括以这种方式创建自定义
NSEvents
NSEvent *someEvent;

- (void) mouseDown:(NSEvent*)someEvent {
    NSLog(@"It worked!");

}
这是我的.h文件:
@interface test : NSWindow <NSWindowDelegate> {

}
有人会解释如何做这件事吗?     
已邀请:
确保您的类继承自
NSWindow
并符合
<NSWindowDelegate>
协议。否则,这只是一个恰好命名为ѭ6的方法,没有人会称之为。 更新:更改您的头文件,使其如下所示:
@interface test : NSWindow <NSWindowDelegate> {  

} 
换句话说,不要将
mouseDown
的原型放在接口定义中,或者放在
.h
文件中的任何其他位置。 在你的实现文件(
.m
)中只输入方法:
- (void) mouseDown:(NSEvent*)someEvent {         
    NSLog(@"It worked!");          
} 
假设您已在设备中打开日志记录(您确定可以从程序中的其他位置读取
NSLog
输出吗?),您应该看到“它工作正常!”印在那里。 我无论如何都不是obj-C专家,但我认为通过将
mouseDown
原型放在界面定义中,你基本上是在创建自己的自定义
mouseDown
方法,它隐藏了“真正的”。这向编译器表明它不应该在窗口单击时调用你的
mouseDown
方法。     
您的子类必须具有NSResponder的父类,否则您将不会获得任何事件。     
你要覆盖NSWindow类,你应该重写NSWindow类的NSView“contentView”来捕获鼠标事件。 contentView外部窗口上的大多数装饰(NSView)都是私有的。 只需创建一个覆盖mouseDown等的新NSView,并将其作为内容视图添加到NSWindow对象。     

要回复问题请先登录注册