2012-05-10 18 views
0

私は本当に長い文字列を持ち、何千もの行がデフォルトのフォントで表示されています。そのため、1つのテーブルビューのセルにすべてを描画するのではなく、複数のセルを作成して同じ文字列を描画し、それぞれが文字列の次の部分を描画します。複数の矩形に1つのNSStringを描画する

出発点を見つけるのに苦労しています。弦の高さの最初の500ピクセルを矩形で描きます - 私は2番目の矩形のどこから始めるべきですか?それが同じ文字列の場合、文字列の一部だけを描画するように指定するにはどうすればよいですか?

各セルはそれ自身の行番号を知っているので、私はテーブルのどこにあるかを特定できます。文字列がどの部分を描画するのか分かりません。

もう1つ質問があります。特定の行数に基づいて1つの文字列を複数の文字列に分割するにはどうすればよいですか?

編集:は、ここで私はそれが役に立つかもしれない探していますいくつかの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. 

EDIT

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文字の範囲を指定する場合は、0〜500の範囲でlineRangeForRange:を使用し、0〜450の範囲を返します(行の終わりになります)。0〜450でsubstringWithRangeを使用します。 – Jaybit

+0

lineRangeForRangeは何をしているのですか?それは私に与えられた結果に混乱しています。私が0、250を与えると、その文字範囲内に完全な行が返されますか? – Snowman

0

私はアプリでテキストを読んでみたいと思うようには聞こえません。なぜtextViewを使用しないのですか?

編集:私のお勧めは、textViewをtableViewCellに配置するのではなく、テキストの先頭を表示し、クリックするとtextViewを表示するviewControllerをプッシュすることでした。メールのようなものがあります。

+0

表のセルにテキストビューを配置したくないので、これはテキストの1セクションのみです。分割する必要はありません。すべてのセクションに同様のスクロール動作が必要です。テキストビューには独自のスクロール動作があるため、テーブルビューと混在すると悪いエクスペリエンスが得られます。 – Snowman

+0

テキストビューでスクロールをオフにすることができますか。 – jrturton

+0

これは、高さ50,000 pxのテキストビューにつながります – Snowman

関連する問題