Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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 如何在Cocoa中的窗口内处理mousedown事件_Objective C_Cocoa_Events_Mouseevent - Fatal编程技术网

Objective c 如何在Cocoa中的窗口内处理mousedown事件

Objective c 如何在Cocoa中的窗口内处理mousedown事件,objective-c,cocoa,events,mouseevent,Objective C,Cocoa,Events,Mouseevent,如何在Cocoa中处理窗口内的mousedown事件 我的代码: -(void)mouseDown:(NSEvent *)event { NSLog(@"yay"); } 我正在使用MacOS10.6,在xcode 4.0.1中 编辑: 是的,这在应用程序代理中,但这是我的。h: @接口跳线AppDelegate:NSWindow{ 这是我以前在应用程序内委托时做过的(只是不针对鼠标事件)。这真的让我很恼火,我不确定,但我在你的头文件(.h)中听说你需要用“NSWindow”替

如何在Cocoa中处理窗口内的mousedown事件

我的代码:

-(void)mouseDown:(NSEvent *)event {
    NSLog(@"yay");
}    
我正在使用MacOS10.6,在xcode 4.0.1中

编辑: 是的,这在应用程序代理中,但这是我的。h:

@接口跳线AppDelegate:NSWindow{


这是我以前在应用程序内委托时做过的(只是不针对鼠标事件)。这真的让我很恼火,我不确定,但我在你的头文件(.h)中听说你需要用“NSWindow”替换“NSObject”。我会测试它,但我现在不在电脑旁

此外,请确保将以下代码放入头文件:

- (void) mouseDown:(NSEvent*)event;
编辑:我做了一些测试和研究,但我不能让它工作。不过我有两个建议

  • 使用'-acceptsFirstMouse方法

  • 尝试创建NSEvent:

    n事件*someEvent; -(void)mouseDown:(NSEvent*)someEvent


这可能不起作用,但我将有更多信息提供给您,以便调用此方法。调用它的类需要从NSResponder继承。窗口和视图都是NSResponder的子类。如果从中调用此方法的类不是NSResponder的子类,则该方法将不会激发

*更新* 还要确保覆盖acceptsFirstResponder以返回yes

- (BOOL)acceptsFirstResponder {
   return YES;
}

确保继承自
NSWindow
,并遵守
协议。如下所示:

@interface YourWindow : NSWindow <NSWindowDelegate> {}
@end

除了缺少前导的
-
(即
-(void)mouseDown:
),这是正确的。您的问题是什么?它不起作用(抱歉,我遗漏了-但它在我的代码中)。您确定要将此代码添加到NSWindow实现中吗?可能是您将其添加到了应用程序委托或类似的内容中?您的应用程序委托继承自NSWindow?这是一个非常奇怪的设计选择-应用程序委托是一个控制器,而不是一个视图。无需将其放入头文件中。它是一个通知,因此ompiler不需要看到标题声明。实际上,我不确定是否有必要遵守
NSWindowDelegate
。不管怎样,只要试一试就行了。这仍然不起作用,这很奇怪。我已经继承了NSWindow,我做了NSWindowDelegate,但没有任何帮助。我不知道发生了什么on@Conor:你确定你没有您试图为其注册鼠标向下事件的窗口/视图上方的某个窗口/视图?可能它正在吸收通知。此外,请尝试执行sosborn所说的操作,即在
acceptsFirstResponder
上返回YES。我正在使用AppDelegate和MainWindow.xib作为我的窗口。我添加的唯一其他文件是使其全屏显示。我还将我很生气,但没用……我不知道该怎么办do@Conor:这是您的问题。您的委托不应从NSWindow继承。您需要创建自定义视图(afaik)并将其连接到从NSWindow继承的新自定义类。
-(void)mouseDown:(NSEvent *)event {    
}