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」で探しました。手元にあると便利です。