NSTextView автопрокрутка
Предположим, что есть окно с NSTextView
который содержит достаточно текста, чтобы вызвать полосы прокрутки. Когда я изменяю размер окна, текстовое представление автоматически прокручивается так, что строка, которая содержит курсор, появляется в середине текстового представления.
Например, это также можно увидеть в TextEdit в MacOS: вставьте в него кучу текста, прокрутите почти до верха [1], поместите курсор в первую видимую строку и измените размер окна. Теперь представление должно прокручивать свое содержимое так, чтобы курсор попадал в середину представления.
У меня вопрос, как мне отключить это поведение? То есть я хотел бы, чтобы текстовое представление никогда не прокручивало курсор автоматически в середину, когда окно изменено в размере.?
[1] Фактическая позиция прокрутки, в которой происходит указанное поведение, может потребовать некоторого метода проб и ошибок, поскольку я не смог выяснить схему, в которой это происходит. В моем тестировании это произошло, когда полоса прокрутки находится в позиции 10% - 30% от общей высоты (сверху).
1 ответ
Вы можете сделать следующие настройки:-
Создать пользовательский класс NSTextView
и реализовать один метод делегата для изменения размера текстового представления и один метод при нажатии на текстовое представление. Обратитесь ниже:-
.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