2016-10-15 1 views
0

서브 클래스가 NSTextView이고 탭을 공백으로 바꾸려면 사용자 입력 (환경 설정에 따라)을 수정하고 싶습니다. 지금까지이 같은 뭔가하는 insertTab 방법을 수정 한 :nstextview 붙여 넣기 중에 탭을 공백으로 바꾸십시오.

- (void) insertTab: (id) sender 
{ 
    if(shouldInsertSpaces) { 
     [self insertText: @" "]; 
     return; 
    } 

    [super insertTab: sender]; 
} 

을하지만 또한 붙여 넣기 이벤트 기간 동안 공백을 대체합니다. 한 가지 해결책은 NSTextStorage replaceCharacter:with: 메서드를 수정하는 것이지만 텍스트 뷰로 데이터를로드 할 경우 텍스트를 바꾼다는 것을 알았습니다. 특히 나는 사용자가 수동으로 입력하는 텍스트 만 수정하려고합니다.

해결책은 found here은 마분지 수정을 제안하지만, 사용자가 마분지를 엉망으로 만들고 싶지 않아 어딘가에 붙여 넣으려고하지 않으려 고하지 않습니다. 누구든지이 일을 어떻게 할 수 있는지에 대한 다른 제안이 있습니까?

답변

0

다른 질문에서 언급 한 것처럼 readSelectionFromPasteboard:type:을 살펴보십시오. 덮어 쓰고 판지를 교체하십시오. 예 :

- (BOOL)readSelectionFromPasteboard:(NSPasteboard *)pboard type:(NSString *)type { 
    id data = [pboard dataForType:type]; 
    NSDictionary *dictionary = nil; 
    NSMutableAttributedString *text = [[NSMutableAttributedString alloc] initWithRTF:data documentAttributes:&dictionary]; 
    for (;;) { 
     NSRange range = [[text string] rangeOfString:@"\t"]; 
     if (range.location == NSNotFound) 
      break; 
     [text replaceCharactersInRange:range withString:@" "]; 
    } 
    data = [text RTFFromRange:NSMakeRange(0, text.length) documentAttributes:dictionary]; 
    NSPasteboard *pasteboard = [NSPasteboard pasteboardWithName:@"MyNoTabsPasteBoard"]; 
    [pasteboard clearContents]; 
    [pasteboard declareTypes:@[type] owner:self]; 
    [pasteboard setData:data forType:type]; 
    return [super readSelectionFromPasteboard:pasteboard type:type]; 
}