假设有一个窗口,其NSTextView
包含足够的文本来触发滚动条。当我调整窗口大小时,textview会自动滚动,以便包含光标的行显示在textview的中间。
例如,在MacOS的TextEdit中也可以看到这一点:在其中粘贴一堆文本,几乎滚动到顶部[1],将光标放入第一个可见行并调整窗口大小。现在视图应滚动其内容,以便光标落在视图的中间。
我的问题是,如何关闭此行为?也就是说,我希望当窗口调整大小时,textview永远不会自动将光标滚动到中间位置。?
[1]发生上述行为的实际滚动位置可能需要一些反复试验,因为我无法找到发生这种情况的模式。在我的测试中,它发生在滚动条位于总高度的10% - 30%位置时(从顶部开始)。
答案 0 :(得分:0)
您可以按照以下方式进行调整: -
创建NSTextView
的自定义类,并为textview大小调整实现一个委托方法,并在单击textview时实现一种方法。请参阅以下内容: -
.h文件
@interface textView : NSTextView
@end
.m文件
#import "textView.h"
@implementation textView
- (void)drawRect:(NSRect)dirtyRect {
[super drawRect:dirtyRect];
// Drawing code here.
}
//Below delegate method which will call when resize the textview. So just set your text view to be non editable.
- (void)viewDidEndLiveResize
{
[self setEditable:NO];
[self setSelectable:NO];
}
//Now when you click on the textview below method will called.
-(void)mouseDown:(NSEvent*) theEvent
{
[super mouseDown:theEvent];
[self setEditable:YES];
[self setSelectable:YES];
}
-(void)keyDown:(NSEvent *)theEvent
{
[super keyDown:theEvent];
[self setEditable:YES];
[self setSelectable:YES];
}
@end
编辑: -
另外,请在textview -> Custom Class