在superview上获取鼠标按下事件

问题描述:

我有一个NSScrollView,它的文档视图是一个名为MasterPage的NSView子视图。在MasterPage上,我有一堆(取决于用户输入的)子视图(来自名为Page的类)。它们以网格格式排列。我试图捕获在MasterPage上点击鼠标的NSPoint。它在没有子视图的情况下工作,但如果点击的点在子视图的区域内,那么超级视图不会注册它。有没有办法做到这一点?我希望这是有道理的。在superview上获取鼠标按下事件

红色区域在superview的.m文件中注册鼠标单击。这四个子视图没有。

The red area registers a mouse click in the superview's .m file. The four subviews do not.

在你MasterPage类,你可以覆盖 -hitTest:方法,并将它返回self而非Page子视图之一。请参阅Event Handling Guide: The Path of Mouse and Tablet Events

在此示例项目http://www.markdouma.com/developer/SubviewSuperview.zip中,您可以看日志记录调用以查看NSView接收事件的内容。如果按住Alt/Option键并单击,白色视图将覆盖-hitTest:并自行返回,从而防止灰色视图接收事件。

enter image description here

+0

这正是我所需要的,谢谢NSGod – PruitIgoe