Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective-C中的鼠标按下事件_Objective C_Cocoa_Mouse_Nsevent - Fatal编程技术网

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!");          
}