2014-12-26 6 views
0

창이있는 경우 NSTextView에 스크롤바를 시작하기에 충분한 텍스트가 포함되어 있다고 가정합니다. 창 크기를 조정하면 텍스트 뷰가 자동으로 스크롤되어 커서가있는 선이 텍스트 뷰 중간에 나타납니다.NSTextView 자동 스크롤

예를 들어 MacOS의 TextEdit에서 텍스트 묶음을 붙여넣고 상단 [1]까지 거의 스크롤하고 첫 번째 보이는 줄에 커서를 놓고 창 크기를 조정할 수 있습니다. 이제보기는 커서가보기의 중간에 오도록 내용을 스크롤해야합니다.

제 질문은 어떻게 작동합니까? 즉, 텍스트 크기가 조정되면 커서를 중간으로 자동 스크롤하지 않기를 바랍니다.

[1]이 동작이 발생하는 실제 스크롤 위치는 이러한 패턴이 발생하지 않는 패턴을 찾을 수 없어 약간의 시행 착오가 필요할 수 있습니다. 내 테스트에서 스크롤바가 전체 높이의 10 % - 30 % 위치에있을 때 발생했습니다 (위에서부터).

+0

마십시오 내부 인터페이스 빌더에서 사용자 정의 클래스의 이름을 언급 당신은 당신의 textview를 편집 가능하게하고 싶습니까? –

+0

@HussainShabbir 예. –

+0

@Eric은 아래의 대답을 참조하십시오 –

답변

0

은 아래이 같은 팅겨을 수행 할 수 있습니다 -

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

+0

답장을 보내 주셔서 감사합니다. 무언가를 놓치지 않으면 않는 한,이 글은 날아 가지 않습니다. 이제 텍스트가 리플 로우되지 않으며 텍스트보기가 포커스와 커서 위치를 잃어 버립니다. 'setEditable : NO'가 필요한 이유는 무엇입니까? 그리고'drawRect :'는 무엇을하고 있습니까? 다르게 말하자면, NSTextView가 어떻게 동작하는지에 대해 꽤 만족합니다. 크기 변경 후 자동 스크롤은 예외입니다. –

+0

기본적으로 이것은 텍스트보기의 기본 동작입니다. 그러나 자동 스크롤을 중지하려면 다음과 같이 조정해야합니다. 그리고 원하는 라인을 클릭하면 초점이 맞춰집니다. –

+0

물론, 위의 조정은 작동하지 않습니다. 클릭하지 않고 대신 키보드를 사용하면 어떨까요? 당신이 이것을 들여다 보았 기 때문에 정말 고마워요.이 트릭이 그렇게 할 것이라고 생각하지 않습니다. –