0

我正在编写一个通知系统,就像咆哮一样。通知是一个窗口,它的级别设置为 NSModalPanelWindowLevel。唯一的问题是,我在那个窗口中有一个按钮,当用户想要单击该按钮时,他/她必须单击它两次。但是,例如,在咆哮中,无论您打开了哪个窗口,您只需单击通知,它就会记录一次单击。那么是水平问题吗?如果是这样,我应该将其设置为什么?谢谢

4

2 回答 2

2

在构成窗口视图内容的自定义控件中,您可能希望重写returnNSView的方法:-acceptsFirstMouse:YES

讨论

接收者可以无条件地返回一个值,也可以使用 的位置theEvent来确定它是否需要该事件。默认实现忽略 theEvent并返回NO.

在子类中重写此方法以允许实例响应点击。这允许用户单击非活动窗口中的视图,只需单击即可激活视图,而不是先单击以使窗口处于活动状态,然后再单击视图。大多数视图对象拒绝点击尝试,因此事件只是激活窗口。但是,许多控件对象(例如NSButtonand的实例NSSlider)确实接受它们,因此用户可以立即操作控件而无需释放鼠标按钮。

于 2011-04-13T23:23:02.800 回答
0

不确定这是否是 Growl 所做的,但您可能能够在窗口中侦听鼠标悬停事件并在单击之前使用它们来激活/停用窗口。我怀疑你的问题是第一次点击被窗口的激活吃掉了。

不过,这只是一个猜测。

要了解如何处理鼠标悬停事件,请查看此文档:

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/EventOverview/TrackingAreaObjects/TrackingAreaObjects.html

于 2011-04-13T23:08:12.063 回答