在多个rects中绘制一个NSString

时间:2012-05-10 15:36:03

标签: iphone objective-c ios

我有一个非常长的字符串,有数千行使用默认字体。因此,我不打算在一个表视图单元格中绘制整个内容,而是创建几个单元格来绘制相同的字符串,每个单元格绘制字符串的下一部分。

我很难找到一个起点。假设我在矩形中绘制字符串高度的前500个像素 - 我怎么知道在第二个矩形中从哪里开始?如果它是相同的字符串,我如何指定它只绘制字符串的某些部分?

每个单元格都会知道它自己的行号,所以我将能够确定表格中的确切位置,我只是不知道字符串将如何知道它应该绘制哪个部分..

或者另一个问题是:如何根据一定数量的行将一个字符串分解为多个字符串?

编辑:以下是我发现的一些可能有用的NSString方法,但我仍然不知道如何在我的情况下使用它们:

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

2 个答案:

答案 0 :(得分: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"在那个范围内。然后我抓住了那个子串

答案 1 :(得分:0)

听起来不像我想在应用中阅读文字的方式。为什么不使用textView?

编辑:我的建议不是将textView放在tableViewCell中,而是显示截断文本的开头,然后单击推送显示textView的viewControllers。有点像邮件。