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)
有人会解释如何做这件事吗?
确保您的类继承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
方法在窗口中点击.