如何在NSTextView对象中实现逐行滚动?无论用户如何尝试滚动,它都必须工作:如果他们拖动滚动旋钮或在触控板上使用双指滚动手势。此外,滚动旋钮应始终以不连续的步骤移动。 (这正是Apples终端模拟器的工作方式。)
我首先要做的是继承NSTextView并覆盖adjustScroll :(它继承自NSView),其描述为here,即:
- (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(没有&# 39;完全没有工作),还是有更好的解决方案?