在superview上获取鼠标按下事件

时间:2011-09-21 18:40:42

标签: objective-c cocoa subview superview mousedown

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

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

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

1 个答案:

答案 0 :(得分:1)

MasterPage课程中,您可以覆盖NSView's -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