簡體   English   中英

可可 NSScrollView 不會將 scrollWheel 事件傳遞給下一個響應者

[英]cocoa NSScrollView not pass scrollWheel event to next responder

我的問題是,我不知道為什么 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 絕對不應該對滾動事件做任何事情。

其次,覆蓋 scrollWheel(with) 將關閉響應式滾動。

答案:您真正想要做的是在您的 (Custom View(NSView)) 類中覆蓋func wantsForwardedScrollEvents(for axis: NSEvent.GestureAxis) -> Bool https://developer.apple.com/documentation/appkit/nsresponder/1534209-wantsforwardedscrollevents

NSScrollView 將尊重這一點,並在不使用它們實際滾動或橡皮筋時轉發 scrollWheel 事件。 此外,它與響應式滾動兼容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM