可可NSScrollView无法将scrollWheel事件传递给下一个响应者

问题描述 投票:0回答:1

我的问题是,我不知道为什么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)
        }
    }
}

现在,我知道如何解决这个问题,但我不知道为什么会有这个问题。

有人知道这种情况的官方信息吗?

swift macos cocoa appkit swift5
1个回答
0
投票

如Marek H所指出的,如果一个对象处理事件,那么它通常会消耗该事件,并且不会将其传递到响应者链上。在这种情况下,如果scrollView滚动,那么它的superView绝对不应该对scroll事件做任何事情。

第二,覆盖scrollWheel(with)将关闭响应滚动。

答案:您真正想做的是在(Custom View(NSView))类中重写func wantsForwardedScrollEvents(for axis: NSEvent.GestureAxis) -> Boolhttps://developer.apple.com/documentation/appkit/nsresponder/1534209-wantsforwardedscrollevents

NSScrollView将尊重这一点,并在没有实际使用滚动或橡皮筋的情况下转发scrollWheel事件。加上它的响应滚动兼容。

© www.soinside.com 2019 - 2024. All rights reserved.