NSStringで複数行を扱ってみました

 複数行のテキスト表示を行う実験をしました。
 そこで分かった事などを書いてみます。

NSString* text = @"test\r\n文字表示\r\n改行です\r\n";
UIFont *	font;
font = [UIFont fontWithName:name size:size];
CGSize textSize = [text sizeWithFont:font];


 textSize.height、複数行に対応してませんでした。返しているのは1行分のサイズ。
 textSize.widthも1行で表示した場合としての値。
 複数行のサイズを取得しようとしたら、改行をチェックして、行ごとの値を調べないといけないようです。


 そんな時役に立ったのが、lineRangeForRangeメソッド。

NSRange line = [text lineRangeForRange:textRange];


 指定した位置を含む行をNSRangeで返してくれます。
 そしたら、substringToIndexで頭の部分から切り出して、substringFromIndexで残りの部分を切り出す。
 切り出した残りの部分を使って繰り返し。


 最後の行かどうかは、lengthを使って長さを比べて見ると、分かります。

if (line.length == text.length) {


 最後の行の終わりに"\r\n"がある場合と無い場合があるかもしれません。

NSRange checkRange = [text rangeOfString:@"\r\n"];
if (checkRange.location==NSNotFound && checkRange.length==0) {
	endCode = 0;
} else {
	endCode = 2; // "\r\n"の二文字分
}
// 描画する文字列を抽出
drawText = [text substringToIndex:line.length-endCode]; // ここで二文字分取り除く


 こんな感じです。
 1行ずつ表示したい時などの参考になれば幸いです。


 あ、それとmacで改行コードの"\r\n"を入れる方法。
 \はoption(alt)押しながら\キーを押すと出ます。macではバックスラッシュで表示されます。
 

 NSStringのメソッドはこちらの詳説Objective-C 2.0」で探しました。手元にあると便利です。