gpt4 book ai didi

swift - NSScrollView 内的 NSTextView 在滚动时不合作

转载 作者:行者123 更新时间:2023-11-30 10:59:26 27 4
gpt4 key购买 nike

我有一个 TableView,其中包含 NSTextView 作为单元格。这是我在scrollView中有scrollView的情况。现在,当我滚动 textView 的内容,并且当 textview 的内容到达末尾时,我希望父 ScrollView ( tableView )继续滚动。但默认情况下这不会发生。相反,当鼠标指针位于 textView 内时,父级根本不会滚动。

I want to achieve something like in this example.

这是我的解决方案:

public class DisableableScrollView: NSScrollView {

public override func scrollWheel(with event: NSEvent) {

// Check if the text field is empty
if (self.subviews[0].subviews[2] as! NSTextView).textStorage?.length == 0 {
nextResponder?.scrollWheel(with: event)
}
// Bottom
else if self.verticalScroller?.floatValue == 1.00 {
if event.deltaY < 0 {
nextResponder?.scrollWheel(with: event)
}
else {
super.scrollWheel(with: event)
}
}
// Top
else if self.verticalScroller?.floatValue == 0.00 {
if event.deltaY > 0 {
nextResponder?.scrollWheel(with: event)
}
else {
super.scrollWheel(with: event)
}
}

else {
super.scrollWheel(with: event)
}
}

但是有一个问题:当我在一个文本字段上滚动时,其他文本字段也在滚动。 click here to see

问题出在 Magic mouse 上。如果我使用普通的强大鼠标,一切正常。但是使用魔术鼠标,当我在滚动后抬起手指时,它会继续滚动(动量滚动),但有时会滚动错误的 textView 实例。根据Apple Documentation ,滚轮事件有两个属性:phase 和momentumPhase。使用魔术鼠标,在我抬起手指后,阶段变为结束,动量阶段变为开始。

有人知道这个问题的标准解决方案吗?或者如果我的代码是正确的,可能会出现什么问题?

最佳答案

我找到了问题的解决方案,因此想分享它。

这个特殊方法wantsForwardedScrollEvents(for:)可用于在内容到达末尾时将滚动事件沿着响应者链向上转发。我们只需重写此方法并在必要时返回 true

关于swift - NSScrollView 内的 NSTextView 在滚动时不合作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53556441/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com