Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.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

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
Macos 为什么我的可点击框需要双击才能获得等于1的点击次数?_Macos_Cocoa_Nsmenuitem_Mousedown_Nsbox - Fatal编程技术网

Macos 为什么我的可点击框需要双击才能获得等于1的点击次数?

Macos 为什么我的可点击框需要双击才能获得等于1的点击次数?,macos,cocoa,nsmenuitem,mousedown,nsbox,Macos,Cocoa,Nsmenuitem,Mousedown,Nsbox,我有一个NSStatusItem,它有一个包含自定义NSView的NSMenuItem。此NSView包含可单击的NSBox的3个子视图(实现了mouseDown事件)。奇怪的是,当我运行应用程序并在按下“播放”按钮后立即输入statusItem时,我只需单击NSBox一次(返回clickCount=1)。当我进入另一个窗口或视图并返回statusItem并尝试单击其中一个NSBox时,什么也没有发生。当我双击项目时,会发生操作,并且clickCount也等于1 -(void)mouseDown

我有一个NSStatusItem,它有一个包含自定义NSView的NSMenuItem。此NSView包含可单击的NSBox的3个子视图(实现了mouseDown事件)。奇怪的是,当我运行应用程序并在按下“播放”按钮后立即输入statusItem时,我只需单击NSBox一次(返回clickCount=1)。当我进入另一个窗口或视图并返回statusItem并尝试单击其中一个NSBox时,什么也没有发生。当我双击项目时,会发生操作,并且clickCount也等于1

-(void)mouseDown:(NSEvent *)theEvent {
    NSLog(@"ClickCount: %ld", theEvent.clickCount);
    if ([delegate respondsToSelector:@selector(boxClicked:)]) {
        [delegate boxClicked:self];
    }
}
有人知道为什么会发生这种情况,以及我如何解决这个问题吗

编辑(完整的m文件代码):


听起来你也需要这样做:

- (BOOL)acceptsFirstMouse:(NSEvent *)theEvent
{
  return YES;
}
因此,第一次鼠标单击事件在您的自定义中被接受


可能还有其他问题,但无法从代码片段中判断。

这可能是因为您的视图不是关键。您可以为NSMenu设置代理,并在
-menuWillOpen:
上调用
[boxView.window makeFirstResponder:boxView]使其成为关键。

使其成为关键有帮助,但不是您描述的方式!无论如何谢谢你!!
- (BOOL)acceptsFirstMouse:(NSEvent *)theEvent
{
  return YES;
}