将拖放事件转发到父视图

2024-02-02

我有一个应用程序,其中有一个派生自 NSView 的自定义视图。 在这个视图中,有几个自定义子视图,它们也是从 NSView 派生的。

我想实现拖放行为,允许将 URL 拖放到视图上。主视图的一切都已正常工作。

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

这有可能吗?不确定我是否可以通过响应者链以某种方式设置它?

任何提示都将受到高度赞赏! 提前致谢。


我遇到了类似的问题,我希望视图中放置任何内容,或者视图处理其中的任何子视图,但调用从未到达那里。

经过一番研究,我发现这个答案最有帮助:https://stackoverflow.com/a/7389711/327471 https://stackoverflow.com/a/7389711/327471

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

NSArray *subviews = [self.view subviews];
for (NSView *aSubview in subviews) {
    [aSubview unregisterDraggedTypes];
}

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

我希望这有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将拖放事件转发到父视图 的相关文章

随机推荐