Objective-C中的Mouse Down事件

Jus*_*tin 3 mouse cocoa objective-c nsevent

我知道这个问题之前已被问过很多,但没有什么能对我有用.以下代码根本不会做任何事情.

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

}
Run Code Online (Sandbox Code Playgroud)

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

NSEvent *someEvent;

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

}
Run Code Online (Sandbox Code Playgroud)

这是我的.h文件:

@interface test : NSWindow <NSWindowDelegate> {

}
Run Code Online (Sandbox Code Playgroud)

有人会解释如何做这件事吗?

Mus*_*sis 9

确保您的类继承NSWindow并符合<NSWindowDelegate>协议.否则,这只是一个恰好被命名的方法,mouseDown没有人会称之为.

更新: 更改您的头文件,使其如下所示:

@interface test : NSWindow <NSWindowDelegate> {  

} 
Run Code Online (Sandbox Code Playgroud)

换句话说,不要mouseDown在接口定义中或.h文件中的任何其他位置放置原型.

在你的实现文件(.m)中只输入方法:

- (void) mouseDown:(NSEvent*)someEvent {         
    NSLog(@"It worked!");          
} 
Run Code Online (Sandbox Code Playgroud)

假设您已在设备中打开日志记录(您确定可以NSLog从程序中的其他位置读取输出吗?),您应该看到"它工作正常!" 印在那里.

我无论如何都不是obj-C专家,但我认为通过将mouseDown原型放在界面定义中,你基本上创建了自己的自定义mouseDown方法,隐藏了"真正的"方法.这表明它应当编译器打电话给你的mouseDown方法在窗口中点击.

  • @Justin你真的把MainMenu.xib中的窗口类从`NSWindow`更改为`test`吗?简单地定义一个类是不够好的.您必须具有该类的实际实例化(即,对象)才能使方法起作用. (5认同)