【发布时间】:2019-05-02 13:04:17
【问题描述】:
我有一个以 NSTextView 作为单元格的 TableView。 这是我在滚动视图中有滚动视图的情况。现在,当我滚动 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
这里的问题在于魔术鼠标。如果我使用普通的强大鼠标,一切正常。但是使用魔术鼠标,当我在滚动后抬起手指时,它会继续滚动(动量滚动)但有时会滚动错误的 textView 实例。根据Apple Documentation,滚轮事件有两个属性:阶段和动量阶段。在我抬起手指后使用魔术鼠标,阶段变为结束,动量阶段变为开始。
有人知道这个问题的标准解决方案吗? 或者如果我的代码是正确的,可能会出现什么问题?
【问题讨论】:
标签: swift xcode cocoa nsscrollview magic-mouse