【发布时间】:2019-11-25 09:34:40
【问题描述】:
我的问题是,我不知道为什么 NSScrollView 没有将 scrollWheel 事件传递给下一个响应者。
我必须手动添加代码
class MyScrollView: NSScrollView {
override func scrollWheel(with event: NSEvent) {
super.scrollWheel(with: event)
// do something
// If you don't use these codes, the next responder will not receive the event.
if let responder = self.nextResponder {
responder.scrollWheel(with: event)
}
}
}
现在,我知道如何解决这个问题,但我不知道为什么会出现这个问题。
有人知道这种情况的官方信息吗?
【问题讨论】:
-
响应链表示只有响应链中的第一个对象处理动作(并不意味着响应链中的所有对象都处理动作)。你的代码是正确的。我会使用你的方法或 NSApp.sendAction: 因为你的下一个响应者可能不知道滚轮。也不要忘记你不应该覆盖滚动视图developer.apple.com/library/archive/releasenotes/AppKit/…
-
@MarekH 下一个响应者知道scrollWheel(with:),它是
NSResponder的一个方法。 “默认实现只是将此消息传递给下一个响应者。” -
你想完成什么?
-
@Willeke 好吧,我创建了一个自定义视图并添加了一个集合视图,其结构类似于(自定义视图(NSView))>(滚动视图)>(剪辑视图)>(集合视图)。我希望我的自定义视图类可以接收到 scrollWheel 事件。但事件总是停止到(滚动视图)
-
所以,我重写了 scrollWheel 函数来满足我的需求,因为下一个响应者是 NSView。
标签: swift macos cocoa appkit swift5