4

如何在 NSTextView 对象中实现逐行滚动?无论用户如何尝试滚动,它都必须工作:无论是拖动滚动旋钮还是在触控板上使用两指滚动手势。此外,滚动旋钮应始终以离散的步长移动。(这正是 Apple 终端模拟器的工作方式。)

我首先尝试做的是继承 NSTextView 并覆盖 adjustScroll: (它从 NSView 继承),这在此处进行了描述,即:

- (NSRect)adjustScroll:(NSRect)newVisible {
    NSRect modifiedVisible = newVisible;
    NSFont *font = [self font];
    CGFloat lineHeight = [[self layoutManager] defaultLineHeightForFont:font];
    modifiedVisible.origin.x = (int)(modifiedVisible.origin.x/lineHeight) * lineHeight;
    modifiedVisible.origin.y = (int)(modifiedVisible.origin.y/lineHeight) * lineHeight;
    return modifiedVisible;
}

但是,这仅在我使用滚动旋钮时提供逐行滚动。偶然我发现子类化 NSScrollView 在使用触控板滚动时也会给我逐行滚动,即使看起来我并没有真正做任何事情(所以为什么这个工作是一个谜),唯一被覆盖的方法是这些:

- (instancetype)initWithFrame:(NSRect)frame {
    self = [super initWithFrame:frame];
    return self;
}
- (void)drawRect:(NSRect)dirtyRect {
    [super drawRect:dirtyRect];
}

然而,滚动旋钮仍然连续移动。我是否必须继承 NSScroller 并覆盖 setDoubleValue (我尝试这样做,但效果不佳,因此解决方案感觉很困难,尽管可能有可能)还是我可以覆盖 reflectScrolledClipView: 在我的子类中到 NSScrollView (没用完全),还是有更好的解决方案?

4

0 回答 0