我有一个NSPageController
-控制器,使用户可以在视图之间水平滑动。
问题在于,在我们要滑动的视图上有一个视图NSTableView
。那时,我无法滑动回到以前的视图,因为该按钮NSTableView
正在“吃掉”所有滑动手势。有谁知道如何仅禁用上的水平滚动,NSTableView
以便水平滑动手势可以转到NSPageController
而不是表格的视图?
使用以下NSScrollView的自定义类实现在Swift中解决
class HorizontalScrollDisabledTable: NSScrollView {
var currentScrollIsHorizontal: Bool = true;
override func scrollWheel(theEvent: NSEvent) {
var phase: NSEventPhase = theEvent.phase
/* Ensure that both scrollbars are flashed when the user taps trackpad with two fingers */
if (phase == .MayBegin) {
super.scrollWheel(theEvent) ;
self.nextResponder?.scrollWheel(theEvent);
return;
}
/* Check the scroll direction only at the beginning of a gesture for modern scrolling devices */
/* Check every event for legacy scrolling devices */
if (phase == .Began || (phase == .None && theEvent.momentumPhase == .None)) {
currentScrollIsHorizontal = fabs(theEvent.scrollingDeltaX) > fabs(theEvent.scrollingDeltaY);
}
if (!currentScrollIsHorizontal ) {
super.scrollWheel(theEvent);
} else {
self.nextResponder!.scrollWheel(theEvent);
}
}
}
这是上面的scrollWheel方法的相同答案的代码,但在ObjectiveC中。
-(void)scrollWheel:(NSEvent *)theEvent {
NSEventPhase phase = [theEvent phase];
/* Ensure that both scrollbars are flashed when the user taps trackpad with two fingers */
if (phase == NSEventPhaseMayBegin) {
[super scrollWheel:theEvent];
[self.nextResponder scrollWheel:theEvent];
return;
}
/* Check the scroll direction only at the beginning of a gesture for modern scrolling devices */
/* Check every event for legacy scrolling devices */
if (phase == NSEventPhaseBegan || (phase == NSEventPhaseNone && theEvent.momentumPhase == NSEventPhaseNone)) {
currentScrollIsHorizontal = fabs(theEvent.scrollingDeltaX) > fabs(theEvent.scrollingDeltaY);
}
if (!currentScrollIsHorizontal ) {
[super scrollWheel:theEvent];
} else {
[self.nextResponder scrollWheel:theEvent];
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句