我的问题是,我不知道为什么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)
}
}
}
现在,我知道如何解决这个问题,但我不知道为什么会有这个问题。
有人知道这种情况的官方信息吗?
如Marek H所指出的,如果一个对象处理事件,那么它通常会消耗该事件,并且不会将其传递到响应者链上。在这种情况下,如果scrollView滚动,那么它的superView绝对不应该对scroll事件做任何事情。
第二,覆盖scrollWheel(with)将关闭响应滚动。
答案:您真正想做的是在(Custom View(NSView))类中重写func wantsForwardedScrollEvents(for axis: NSEvent.GestureAxis) -> Bool
。https://developer.apple.com/documentation/appkit/nsresponder/1534209-wantsforwardedscrollevents
NSScrollView将尊重这一点,并在没有实际使用滚动或橡皮筋的情况下转发scrollWheel事件。加上它的响应滚动兼容。