swift - 可可 NSScrollView 不将 scrollWheel 事件传递给下一个响应者
问题描述
我的问题是,我不知道为什么 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) 将关闭响应式滚动。
答:您真正想要做的是func wantsForwardedScrollEvents(for axis: NSEvent.GestureAxis) -> Bool
在您的 (Custom View(NSView)) 类中覆盖。
https://developer.apple.com/documentation/appkit/nsresponder/1534209-wantsforwardedscrollevents
NSScrollView 将尊重这一点,并在不使用它们来实际滚动或橡皮筋时转发 scrollWheel 事件。此外,它还兼容响应式滚动。
推荐阅读
- java - 上三角矩阵的零空间
- python-2.7 - 在函数装饰器中使用 pytest 夹具
- javascript - 我可以在控制台日志中看到来自 action(redux) 的道具,但无法在窗口上访问。给出类型错误:无法读取未定义的道具“休息”
- python - 使用 namedtuple 变量创建一个新列表,并在模拟运行时对其进行迭代?
- c# - StackLayout 内的 StackLayout 创建溢出
- arrays - 在 init.d 中循环一个函数
- c# - .net 核心 Web 应用程序并从 azure 事件中心读取数据
- android - 更改片段中的屏幕亮度
- r - 如何在将编号列相互耦合的同时从宽到长?
- javascript - 使用百分比计算减少对象数组