2012-05-10 29 views
0

我有一個非常長的字符串,數千行帶有默認字體。因此,我不是在一個表格視圖單元格中繪製整個事物,而是使用多個單元格繪製相同的字符串,每個字符串繪製字符串的下一部分。在多個矩形中繪製一個NSString

我很難找到一個出發點。假設我在矩形中繪製了第一個500像素高度的字符串 - 我怎麼知道從第二個矩形開始的位置?如果它是相同的字符串,我如何指定它只繪製字符串的某些部分?

每個單元格都會知道它是自己的行號,所以我將能夠確定表格中的確切位置,我只是不知道該字符串如何知道它應該繪製哪個部分..

或者另一個問題是:如何根據一定數量的行將一個字符串拆分爲多個字符串?

編輯:這裏有一些方法NSString的我發現,可能是有用的,但我仍然不知道我將如何使用它們在我的情況:

- (void)getLineStart:(NSUInteger *)startIndex end:(NSUInteger *)lineEndIndex contentsEnd:(NSUInteger *)contentsEndIndex forRange:(NSRange)aRange 
- (NSRange)lineRangeForRange:(NSRange)aRange 

回答

1

使用substringWithRange:這將使你選擇一個字符串的開始和結束點。我會抓住每個部分的一些字符。因此第1部分將是0-500第2部分將是500-1000。這裏的問題是你可能會在句子中斷。你可以使用像lineRangeForRange這樣的東西來確定你的子串的範圍。

lineRangeForRange 
Returns the range of characters representing the line or lines containing a given range. 

- (NSRange)lineRangeForRange:(NSRange)aRange 
Parameters 
aRange 
A range within the receiver. 
Return Value 
The range of characters representing the line or lines containing aRange, including the line termination characters. 

編輯

NSString *string = @"tjykluytjghklukytgjhkkghkj sdkjlhfkjsadgfiulgeje fuaeyfkjasdgfueghf aksjgflkj. wyruehskjluishfoeifh uasyeajhkfa uiyelkjahsdf uayekljshdf aehkfjsd. \n I iheio;fajkdsf sdfhlueshkfjskdhf ujhelkjfh. luehljkfhlsdf. leufhlkjdshfa. \n euoiywhfldsjkhf euyhfsdlkj. ewhlkjfsd. euilhfsdkjishdkjf euhjklsfd. \n"; 
NSLog(@"string length:%i", [string length]); 
NSRange range; 
range.length = [string length]/2; 
range.location = 0; 
NSLog(@"LineRangeForRange:%i", [string lineRangeForRange:range].length); 
NSLog(@"Substring:%@", [string substringWithRange:[string lineRangeForRange:range]]); 

記錄顯示:

string length:295 
LineRangeForRange:148 
Substring:tjykluytjghklukytgjhkkghkj sdkjlhfkjsadgfiulgeje fuaeyfkjasdgfueghf aksjgflkj. wyruehskjluishfoeifh uasyeajhkfa uiyelkjahsdf uayekljshdf aehkfjsd. 

那麼這是什麼做的是我提供的LineRangeForRange這是從零到字符串的一半範圍。它可以在該範圍內的最後一行「\ n」。然後我抓住那個子字符串

+0

嗯,因爲它在句子中間切斷會真的毀了經驗..我想盡可能自然.. – Snowman

+0

lineRangeForRange我相信會返回你的範圍,不會削減你的句子。因此,例如,您希望範圍爲0-500個字符,則使用lineRangeForRange:範圍爲0-500,它將返回範圍0-450(這將是行的末尾),並且您在0-450範圍內使用substringWithRange。 – Jaybit

+0

等等,lineRangeForRange做了什麼......我對它給我的結果感到困惑。如果我給它0,250,它會在該字符範圍內返回完整的行嗎? – Snowman

0

聽起來不像是我想要在應用程序中閱讀文本的方式。爲什麼不使用textView?

編輯:我的建議是不要把textView放在tableViewCell中,而是要顯示被截斷的文本的開頭,然後點擊push顯示textView的viewControllers。有點像Mail一樣。

+0

因爲我不想在表格單元格中放置文本視圖。這僅適用於一段文本,我還有其他章節不需要分割,我需要所有部分具有相似的滾動行爲。文本視圖有它自己的滾動行爲,所以與表視圖混合在一起會帶來不好的體驗。 – Snowman

+0

很確定您可以關閉文本視圖中的滾動。 – jrturton

+0

這將導致高度的文本視圖50,000 px – Snowman