2013-07-01 53 views
4

是否有一種簡單的方法來拆分NSAttributedString,以便只獲取最後50行左右的行?從NSAttributedString中提取最後50行

NSMutableAttributedString *resultString = [receiveView.attributedText mutableCopy]; 
     [resultString appendAttributedString:[ansiEscapeHelper attributedStringWithANSIEscapedString:message]]; 
     if ([[resultString.string componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]] count]>50) { 
      //resultString = [resultString getLastFiftyLines]; 
     } 
+1

你是問關於線條或字符? ([結果字符串長度]> 50) - 關於字符,而不是行 – Tala

+0

我猜這兩個工程,但我更喜歡行。 –

+0

字符串中的行根據字體大小+ UI元素寬度+自動換行來標識。如果有50個字符可用,請不要使其過於複雜,並使用子字符串,如我的回答 – Tala

回答

3

的長度是有一個簡單的方法來拆分NSAttributedString,所以我只得到最後50個左右的行?

號你將有權要求string,並確定你有興趣,然後創建一個使用這樣的API從源頭上派生的新NSAttributedString表示作爲- [NSAttributedString attributedSubstringFromRange:]範圍:

- (NSAttributedString *)lastFiftyLinesOfAttributedString:(NSAttributedString *)pInput 
{ 
    NSString * string = pInput.string; 
    NSRange rangeOfInterest = ...determine the last 50 lines in "string"...; 
return [pInput attributedSubstringFromRange:rangeOfInterest]; 
} 
+0

這聽起來很辛苦...... 我想我可以從確定最後50行: [resultString.string componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]計數] 但我怎麼做的NSRange出來的那...... –

+0

@DavidKarlsson使用這個API,你可以將'-componentsSeparatedByCharactersInSet:'返回的最後50個字符串的'-length'加起來,並且爲每個換行符加1(被'-componentsSeparatedByCharactersInSet:'省略)。總和是感興趣的字符串(例如最後的234個字符)的* length *,所以'NSRange'將是'{string.length-sum/* location * /,sum/* length * /}'。 – justin

2

可以使用AttributedString的子方法:

if ([resultString length]>50) { 
    resultString = [resultString attributedSubstringFromRange:NSMakeRange(0, 50)]; 
} 

NSMakeRange - 0告訴我們從哪裏開始和50是子

+0

這是最後的50 *字符。*我相信OP正在查找最後50行* –

+0

讓我們仔細檢查。由於他在他的問題 – Tala

+0

中使用[resultString length]> 50,這不是50個首字符嗎?從0到50? –