2011-11-05 75 views
3

我有一個NSTextView,我從NSTask輸出文本。除了滾動和選擇行爲之外,一切都按預期工作。NSTextView滾動行爲和選擇行爲

1:如果我嘗試向上滾動,我放開後,滾動位置會立即回到底部。有任何想法嗎?我已經瀏覽了很多有關這方面的文檔,並且找不到任何相關內容。

2:如果我選擇文本,它會將其刪除。我只想讓它選擇,以便我可以複製和粘貼。也失去了這一個。

任何提示或指針將受到歡迎。謝謝。

- (id)init 
{ 
    [super init]; 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(readPipe:) 
               name:NSFileHandleReadCompletionNotification 
               object:nil]; 

    return self; 
} 

- (void)kicked 
{ 
    task = [[NSTask alloc] init]; 

    [task setLaunchPath:[self.kickLocationTextField stringValue]]; 
    [task setArguments:kickBuild]; 

    NSPipe *pipe = [[NSPipe alloc] init]; 
    fileHandle = [pipe fileHandleForReading]; 
    [fileHandle readInBackgroundAndNotify]; 

    [task setStandardOutput:pipe]; 
    [task setStandardError:pipe]; 

    [task launch]; 

    [task release]; 
    [pipe release]; 
} 


- (void)readPipe:(NSNotification *)notification 
{ 
    NSData *data; 
    NSString *text; 

    if([notification object] != fileHandle) 
    { 
     return; 
    } 

    data = [[notification userInfo] objectForKey:NSFileHandleNotificationDataItem]; 
    text = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; 

    [nsTaskOutput insertText:text]; 

    [text release]; 
    if (data != 0) 
    { 
     [fileHandle readInBackgroundAndNotify]; 
    } 
} 
+0

你在文本視圖替換整個文本,每當你從任務輸出?請編輯問題併發布您用來從任務獲取輸出的代碼並將其添加到文本視圖中。 – 2011-11-06 00:31:34

+0

已更新。根據NSTextView的文檔...如果在視圖中沒有選擇任何內容,它將追加下一個傳入的字符串。如果有選定的文本...它將取代它。 一切都按預期工作,除前面兩個問題外。 – crewshin

回答

3

試試這個,而不是insertText:

NSScroller *scroller = nTaskOutput.enclosingScrollView.verticalScroller; 
BOOL shouldScrollToBottom = scroller.doubleValue == 1.0; 
NSTextStorage *ts = nTaskOutput.textStorage; 
[ts replaceCharactersInRange:NSMakeRange(ts.length, 0) withString:text]; 
if (shouldScrollToBottom) { 
    NSRect bounds = nTaskOutput.bounds; 
    [nTaskOutput scrollPoint:NSMakePoint(NSMaxX(bounds), NSMaxY(bounds))]; 
} 
+0

好!這很好用! 唯一的缺點是,它導致它不會自動滾動到新的輸出底部。 – crewshin

+0

我修改了我的答案,但這只是一個猜測。 –

+0

賓果!我將不得不分解你在這裏做的事情。我從來沒有使用NSTextStorage或NSScroller,所以現在是時候深入瞭解文檔的這些部分。 非常感謝羅布。 – crewshin