将拖放事件转发到父视图

gui*_*low 2 cocoa drag-and-drop objective-c nsview nsresponder

我有一个应用程序,其中有一个自定义视图,该视图派生自NSView。在此视图中,有几个自定义子视图,这些子视图也源自NSView。

我想实现一种拖放行为,该行为允许将URL拖放到视图上。一切都已经可以用于主视图了。

因此,实际上,我将不得不在子视图和父视图类上实现拖动行为处理程序。事实是,我不想将完整的处理代码复制到所有子视图中,以使它们也接受拖动事件。因此,我认为这是让他们将所有拖动事件转发到父视图的最佳方法。

这有可能吗?不知道我是否可以通过响应者链进行设置?

任何提示,高度赞赏!提前致谢。

red*_*ard 5

我遇到了类似的问题,我希望在视图中放下任何东西,或者任何子视图都可以由视图来处理,但是调用从未到达那里。

经过研究后,我发现此答案最有帮助:https : //stackoverflow.com/a/7389711/327471

本质上,如果视图未注册为接收任何拖动事件,则应将信息自动传递到其父视图。因此,就我而言,我最终得到了这样的结果:

NSArray *subviews = [self.view subviews];
for (NSView *aSubview in subviews) {
    [aSubview unregisterDraggedTypes];
}
Run Code Online (Sandbox Code Playgroud)

当然,您可以比这更精确,并确保仅检查某种类型的子类或所需的任何参数。但是最终的关键是从拖动类型中注销问题子视图。

我希望这有帮助。