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
在Cocoa中,将光标悬停在圆形视图上时,更改光标的最佳方式是什么?_Cocoa_Mouse_Nsview - Fatal编程技术网

在Cocoa中,将光标悬停在圆形视图上时,更改光标的最佳方式是什么?

在Cocoa中,将光标悬停在圆形视图上时,更改光标的最佳方式是什么?,cocoa,mouse,nsview,Cocoa,Mouse,Nsview,我想做什么 我有一个循环的自定义NSView子类,我想在鼠标悬停在视图的循环部分上时更改光标的外观,但在视图矩形中位于循环之外的部分上时不更改光标的外观 。我本来会用一个图像标签把它内联起来的,但我太新了,不能参与到这么棒的功能中去 到目前为止我所知道的 我知道如何通过NSCursor更改光标的外观。我认为对于矩形视图来说,实现这一点的最佳方法是使用光标矩形。我知道我可以接收mouseMoved事件(当鼠标不在该视图上时,应该使用mouseEntered和mouseExited将其关闭),并且有

我想做什么

我有一个循环的自定义NSView子类,我想在鼠标悬停在视图的循环部分上时更改光标的外观,但在视图矩形中位于循环之外的部分上时不更改光标的外观

。我本来会用一个图像标签把它内联起来的,但我太新了,不能参与到这么棒的功能中去

到目前为止我所知道的

我知道如何通过NSCursor更改光标的外观。我认为对于矩形视图来说,实现这一点的最佳方法是使用光标矩形。我知道我可以接收mouseMoved事件(当鼠标不在该视图上时,应该使用mouseEntered和mouseExited将其关闭),并且有一种简单、廉价的方法来确定点是否位于感兴趣的区域

那么问题出在哪里呢?

据我所知,系统不会将mouseMoved事件发送到不是第一响应者的视图。因此,如果我想在鼠标悬停在我的视图上时获得mouseMoved事件,我需要从当前拥有它的人那里窃取firstResponder状态。如果一个文本视图有焦点,只需将鼠标移到这样一个视图上,它就会被偷走,从可用性的角度来看,这是不可接受的

因此,我的问题可以归结为:有没有更好的办法?我可以在不作为第一响应者的情况下获得mouseMoved事件吗

谢谢

我会添加以下标签:自定义视图鼠标事件nscursorfirstresponder
但是,我是SA noob,所以我不能。我想您可能只需要覆盖NSView中的acceptsFirstResponder方法来返回YES。如果没有,则视图将不会收到任何事件信息

它必须是一个圆形区域吗?如果可以接受视图矩形边界内的任何位置,则可以使用。

确实如此。谢谢可悲的是,该地区的循环性质是不可谈判的。令人高兴的是,使用mouseMoved事件执行命中检测(并在mouseEntered和mouseExited方法不需要时关闭它们)效果相当好。