2014-09-06 81 views
0

我有一個NSTextView包含多行文本。當調用-deleteToBeginningOfLine:,整個字符串被刪除,而不是最後一行:NSTextView的deleteToBeginningOfLine:刪除整個字符串

NSTextView *textView = [[NSTextView alloc] initWithFrame:NSZeroRect]; 

textView.string = @"foo\nbar"; 
[textView deleteToBeginningOfLine:nil]; 
NSAssert([textView.string isEqualToString:@"foo\n"], @""); // fail, string is "". 

// Modifying the selected range doesn't help. 
textView.string = @"foo\nbar"; 
textView.selectedRange = NSMakeRange(textView.string.length, 0); 
[textView deleteToBeginningOfLine:nil]; 
NSAssert([textView.string isEqualToString:@"foo\n"], @""); // ditto. 

// Using \r\n changes nothing. 
textView.string = @"foo\r\nbar"; 
[textView deleteToBeginningOfLine:nil]; 
NSAssert([textView.string isEqualToString:@"foo\r\n"], @""); // ditto. 

當視圖已經在一個窗口中進行佈局,它按預期工作。但是我想在將視圖添加到任何其他視圖之前編輯該字符串。我如何完成這項工作?

+0

你確定你瞭解術語「line」嗎?我很確定,你沒有。這不是「段落」。 – 2014-09-06 13:10:10

+0

@Amin我認爲一行是由單行換行分隔的一部分字符串,所以字符串「foo \ nbar」由兩行「foo」和「bar」組成。刪除開頭(從某處開始)應該最多刪除一行,而不是兩行。那麼,「段落」是什麼意思?這是不是由兩個或更多連續換行符分隔的一組「行」? – uasi 2014-09-06 13:30:30

+0

然後,我發現「行」實際上計數插入換行作爲文本換行的結果。當文本視圖太窄時,「foo \ nbar」可能超過兩行。 – uasi 2014-09-06 13:36:36

回答

0

創建具有良好幀大小的文本視圖。

NSTextView *textView = [[NSTextView alloc] initWithFrame:NSMakeRect(0, 0, 1000, 1000)]; 
textView.string = @"foo\nbar"; 
[textView deleteToBeginningOfLine:nil]; 
NSAssert([textView.string isEqualToString:@"foo\n"], @""); // ok. 

// Don't make the frame too small. 
NSTextView *textView = [[NSTextView alloc] initWithFrame:NSMakeRect(0, 0, 1, 1)]; 
textView.string = @"foo\nbar"; 
[textView deleteToBeginningOfLine:nil]; 
NSAssert([textView.string isEqualToString:@"foo\n"], @""); // fail, string is "foo\nba".