原文(NSString)から改行とスペースを除いてラベル表示
▼やりたいこと
【改行と空文字が入っている文字列から
改行とスペースを除き、2行分まで表示して残りを省略】
▼つまりこういうこと
[原文]
///////////////////////////////////////////////////////////////////////////
はじめまして。
プロフィールを読んで頂きありがとうございます!
□□に住んで□□年になります。
出身は□□です。
仕事は□□をしています。
趣味は□□や□□です。
最近の休日はカフェで本を読んだり、ショッピングに出かけることが多いです。
///////////////////////////////////////////////////////////////////////////
↓
[表示]
///////////////////////////////////////////////////////////////////////////
はじめまして。プロフィールを読んで頂きありがとうございま
す!□□に住んで□□年になります。出身は□□です。仕事...
///////////////////////////////////////////////////////////////////////////
▼STEP①
一発で出来たら便利だなーと思いながらとりあえずぐぐる。
出た!
http://obc-fight.blogspot.jp/2012/07/nsstring-trim-spaces.html
これでいけるんじゃ?(´゜∀゜`)とかテンション高めに使ってみたが
何も起こらない。w
▼STEP②
と思ったら、同じようにハマっている方がいた。
なるほどー。「文字列の両端から」ってのは多分英文とかそゆことなのかな?
よし、じゃあこれで@"\n"を@""に置換しちゃえー(´゜∀゜`)
とかテンション高めに使ってみたが
何も起こらない。w
とりあえずここで全角スペースだけは空文字に置換するようにしてと。
▼STEP③
気を取り直してようやく発見!
http://qiita.com/Ushio@github/items/828d0c806b72c4b71d8d
これを使うと下記のように一行ごとに配列に格納される。
("はじめまして。",
"プロフィールを読んで頂きありがとうございます!",
"",
"□□に住んで□□年になります。", ...);
あとはNSMutableStringをいっこ用意して、
for文で配列の要素分回して
空文字(空の行)じゃなかったらどんどんappendして繋げてあげればひとまず
///////////////////////////////////////////////////////////////////////////
はじめまして。プロフィールを読んで頂きありがとうございます!□□に住んで□□年になります。出身は□□です。仕事は□□をしています。趣味は□□や□□です。最近の休日はカフェで本を読んだり、ショッピングに出かけることが多いです。
///////////////////////////////////////////////////////////////////////////
という文章が完成。おしゃ!\(^ω^\)( /^ω^)/
▼ラベルを用意
ここまで来たらあとはLabel側で調整。
numberOfLinesを2に設定して、sizeToFitをかけるのと、
尻すぼみにするのはこちらを参考にして実装。
http://pirosikick.hateblo.jp/entry/20100816/1281972881
▼完成版コード
ちょっと複雑なことしてるのは
テーブルビューのセルを可変にするためにやってるだけです。
廃止になったメソッドのケアもして、iOS7とiOS6でラベルの作り方わけてます。
+ (UILabel *)createLabel:(NSString *)originalText
{
if ([originalText isEqualToString:@""]) {
//空文字なら処理しない
return nil;
}
NSLog(@"original:%@",originalText);
originalText = [originalText stringByReplacingOccurrencesOfString:@" "withString:@""];//全角除去
NSMutableArray *lines = [NSMutableArrayarray];
[originalText enumerateLinesUsingBlock:^(NSString *line, BOOL *stop) {
[lines addObject:line];
}];
NSMutableString *text = [[NSMutableStringalloc] init];
for (int i = 0; i < [lines count]; i++) {
if (![lines[i] isEqualToString:@""]) {
[text appendString:lines[i]];
}
}
NSLog(@"text:%@",text);
UILabel *label;
UIFont *font = [UIFont systemFontOfSize:13.0];
if (OS_VERSION_LESS_THAN(@"7.0")) {
//iOS6
NSLog(@"OS6:%s",__func__);
CGSize size = [(text ? text : @"") sizeWithFont:font
constrainedToSize:(CGSize){MSG_MAX_WIDTH, MSG_MAX_HEIGHT}
lineBreakMode:NSLineBreakByTruncatingTail];
label = [[UILabel alloc] initWithFrame:(CGRect){0, 0, size.width, size.height}];
label.backgroundColor = [UIColorclearColor];
label.textColor = [UIColor darkGrayColor];
label.lineBreakMode = NSLineBreakByTruncatingTail;
label.text = (text ? text : @"");
label.font = font;
label.numberOfLines = 2;
label.tag = COMMENT_LABEL;
[label sizeToFit];
return label;
} else {
//iOS7
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStylealloc] init];
paragraphStyle.lineBreakMode = NSLineBreakByTruncatingTail;
paragraphStyle.alignment = NSTextAlignmentLeft;
NSDictionary *attr = @{NSFontAttributeName : font,
NSParagraphStyleAttributeName : paragraphStyle};
NSAttributedString *str = [[NSAttributedString alloc] initWithString:(text ? text : @"")
attributes:attr];
CGRect rect = [str boundingRectWithSize:(CGSize){MSG_MAX_WIDTH, MSG_MAX_HEIGHT}
options:NSStringDrawingUsesLineFragmentOrigin
context:nil];
label = [[UILabel alloc] initWithFrame:rect];
label.backgroundColor = [UIColorredColor];
label.textColor = [UIColor darkGrayColor];
label.lineBreakMode = NSLineBreakByTruncatingTail;
label.attributedText = str;
label.numberOfLines = 2;
label.tag = COMMENT_LABEL;
[label sizeToFit];
return label;
}
}