こんにちは!1年目のオカモトです。
今日で1年目も終わると思うと、びっくりです。
ちなみに、セプテーニでは1年目のことをブランニュー、略してBNと呼びます!
何か変ですよね笑
iPhoneアプリを作っていると、UILabelとかUITextViewを使うシーンも多いと思うのですが、結構使い勝手が悪く感じることも多く、
「文字色を一部だけ変えて強調したい」なんて時には、UILabelなら複数用意しないといけないのか?と頭を抱えがちです。
iOS6からはNSAttributedStringっちゅうのが標準サポートしたようで、これを使って色やフォントを変えてみました。
今回は
3月が終わるっ!!!
というのを表現してみましょう。
1.NSAttributedStringを用意する
考え方としては、
(1)[3月が] (2)[終わるっ] (3)[!!!]
という3要素に分解して、各要素ごとにNSAttributedStringを作ったのち連結します。
Rangeを指定して、[終わるっ]の部分だけ変更を加える事もできますが、僕は分解して後から繋ぐほうが好きです。
まず、(2)[終わるっ]の要素から作ります。
NSAttributedString *end = [[NSAttributedString alloc] initWithString:@"終わるっ" attributes:@{ NSForegroundColorAttributeName : [UIColor redColor], NSFontAttributeName : [UIFont boldSystemFontOfSize:20] } ];
NSStringを作る要領とほとんど同じで、引数attributesの中に描画したい変更を加えます。
attributesはNSDictionary型なので、上記のように色を変える+フォント変更などにも対応できるようです。
他にも影をつけたり、下線を引いたりも可能だったはず。
次に、(1)(3)。attributesの指定もないのでNSStringと同じですね。
NSAttributedString *march = [[NSAttributedString alloc] initWithString:@"3月が"]; NSAttributedString *exclamation = [[NSAttributedString alloc] initWithString:@"!!!"];
各要素が揃ったところで、これをつなぎ合わせます。
NSMutableAttributedString *endMarch = [[NSMutableAttributedString alloc] initWithAttributedString:march]; [endMarch appendAttributedString:end]; [endMarch appendAttributedString:exclamation];
2.UILabelに貼る
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(略)];
[self.view addSubview:label];
label.attributedText = endMarch;
.textが.attributedTextに変わるだけで、他は今までと変わりません。
これを実行すれば、3月が終わってしまう哀愁ただよう文字が出てくるはずです!
ちなみに・・・
このプロパティはiOS6しか標準では持ってないので、iOS5以前の対応は別途必要となります。
機能拡張のためのサブクラスが用意されているので、ご興味のある方は下記の記事を参考になさってみてください。 1つめで紹介されているOHAttributedLabelなんかは結構手軽に触ることができました!
UILabelでのテキスト表示をリッチにする機能拡張サブクラス3種