Objective-C中的鼠标按下事件
我知道这个问题以前被问过很多次,但对我来说什么都不管用。下面的代码根本不起任何作用Objective-C中的鼠标按下事件,objective-c,cocoa,mouse,nsevent,Objective C,Cocoa,Mouse,Nsevent,我知道这个问题以前被问过很多次,但对我来说什么都不管用。下面的代码根本不起任何作用 - (void) mouseDown:(NSEvent*)event { NSLog(@"It worked!"); } 我尝试了许多不同的方法来实现这一点,包括以这种方式创建自定义n事件: NSEvent *someEvent; - (void) mouseDown:(NSEvent*)someEvent { NSLog(@"It worked!"); } 这是我的.h文件: @int
- (void) mouseDown:(NSEvent*)event {
NSLog(@"It worked!");
}
我尝试了许多不同的方法来实现这一点,包括以这种方式创建自定义n事件
:
NSEvent *someEvent;
- (void) mouseDown:(NSEvent*)someEvent {
NSLog(@"It worked!");
}
这是我的.h文件:
@interface test : NSWindow <NSWindowDelegate> {
}
@接口测试:NSWindow{
}
有人能解释一下如何做到这一点吗?确保您的类继承自
NSWindow
,并符合
协议。否则,这只是一个名为mouseDown
的方法,没有人会调用它
更新:更改头文件,使其如下所示:
@interface test : NSWindow <NSWindowDelegate> {
}
假设您在设备中打开了日志记录(您确定可以读取程序中其他地方的NSLog
输出吗?),您应该会看到“它工作了!”打印在那里
无论如何,我都不是obj-C专家,但我认为,通过将
mouseDown
原型放入接口定义中,您基本上是在创建自己的自定义mouseDown
方法,该方法隐藏了“真实的”方法。这向编译器表明,它不应在窗口单击时调用您的mouseDown
方法。您的子类必须具有NSResponder的父类,否则您将不会获得任何事件。如果要覆盖NSWindow类,则应覆盖NSView“contentView”用于捕获鼠标事件的NSWindow类的。contentView外部窗口上的大多数装饰(NSView)都是私有的
只需创建一个覆盖mouseDown等的新NSView,并将其作为您的内容视图添加到NSWindow对象。我已经这样做了,但它不起作用。我将编辑帖子以显示我所做的一切。回复更新。我已经做过了(我只是忘了将.h和.m文件的代码分开。@Justin:你确定它不起作用吗?单击窗口的唯一效果是向日志中写入一些内容。你确定你的应用程序能够写入日志并且能够读取日志吗?如果你显示一个警报对话框而不是写入日志,会发生什么情况?我不知道如何显示警报。是的,这个程序中的其他东西也可以发送NSLogs。@Justin你是否真的在Main Menu.xib中将窗口的类从
NSWindow
更改为test
?仅仅定义一个类是不够的。你必须有该类的实际实例化(即对象)什么是子类?你是说“@interface test:NSWindow{”中的“test”吗是子类吗?抱歉,我不知道您的类是NSWindow的子类,NSWindow是NSResponder的子类。我甚至不知道子类是什么。感谢您指出这一点!@Justin:您应该阅读以下内容:这应该是公认的答案,它不需要是NSWindow的子类。它需要是NSResponder的子类。
- (void) mouseDown:(NSEvent*)someEvent {
NSLog(@"It worked!");
}