UILabelは、iOSアプリ開発において使用頻度の高いクラスですが、カユいところに手が届かなかったりします。たとえばテキストの一部だけ強調表示するといった使い方はできませんし、動的に更新されるテキストを上寄せにしようと思ったら、そのテキストがちょうど納まるUILabelのサイズを算出するメソッドをコールしてサイズを指定する必要があります。
今回はそんなUILabelの機能を拡張してくれるサブクラス3種を紹介します。
OHAttributedLabel
特徴
NSAttributedStringをラップしてUILabelに持たせたもので、テキストの一部だけフォントや色を変えたりといった指定が簡単にできるようになります。
またリンクの付与、テキスト上寄せといったことも簡単にできます。
使用準備
ソースコードを以下のURLよりダウンロード
CoreText.frameworkをプロジェクトに追加
OHAttributedLabel.hとNSAttributedString+Attributes.hをインポート
テキストの一部を赤字にする
NSMutableAttributedStringのインスタンスを生成します。引数には表示する文字列を渡します。
setTextColor:range:メソッドで、変更するフォントカラーと、変更する範囲を指定します。
OHAttributedLabelオブジェクトのattributedTextプロパティにNSMutableAttributedStringオブジェクトをセットして適用完了です。
ちなみに、setTextColor:range:の代わりにrange引数のないsetTextColor:メソッドを用いると、文字列全体に適用されます。
また、太字指定はsetTextBold:range:メソッドでYESをセットするだけです。
その他の使い方
リンクを貼る場合は、addCustomLink:inRange:メソッドにURLと範囲を指定します。
OHAttributedLabelのソースコードに付属しているサンプルプロジェクトには、デリゲートメソッドを実装してアラートを出したり、タップ済みのリンクの文字色を変えたりといったサンプルも入っています。
centerVerticallyプロパティにYESをセットすると中央揃え、NOで上寄せになります。
UILabelのtextAlignmentに指定できる値として、UITextAlignmentJustifyが追加されています。
これは
このようにCoreTextで定義されているアライメントタイプであるkCTJustifiedTextAlignmentをUITextAlignment型にキャストしたもので、これを指定するとパラグラフの末尾が自然に揃えられます。
TTTAttributedLabel
特徴
OHAttributedLabelと同じく、NSAttributedStringの機能をUILabelに持たせたものです。
OHAttributedLabelの後発なので、できることはこちらのほうが多いのですが、APIとしては手軽さに欠ける印象です。
OHAttributedLabelとTTTAttributedLabelのAPIの違いを比較しやすいよう、両クラスで同様の機能を実装したサンプルアプリを作成し下記URLにアップしました。動作やコードの確認にご利用ください。
使用準備
ソースコードを以下のURLよりダウンロード
CoreText.frameworkをプロジェクトに追加
TTTAttributedLabel.hをインポート
使い方
OHAttributedLabelと使用方法の比較ができるよう、テキストの一部を赤字・太字にする方法、リンクを貼る方法を紹介します。
赤字・太字等の属性の指定処理は、setText:afterInheritingLabelAttributesAndConfiguringWithBlock:メソッドのブロック内に記述します。
属性の指定にはaddAttribute:value:range:メソッドを用いるのですが、これはNSAttributedStringクラスに定義されているもので、OHAttributedLabelのようにラップしてくれていないため、フォントを指定する場合にはCTFontRef型にする必要があったりと扱いが煩雑になります。
リンクの指定はaddLinkToURL:withRange:メソッドをコールします。
このメソッドだけ見るとOHAttributedLabelとほぼ同じなのですが、TTTAttributedLabelの場合はリンクをタップされたときの処理用のdelegateメソッドを実装する必要があります。
OHAttributedLabelはここはラップしてくれているのでひと手間増えることになりますが、openURL:ですぐにSafariやiTunesに飛ばすのではなく、一旦確認を挟みたい場合には便利です(ただし、OHAttributedLabelもデリゲートメソッドのattributedLabel:shouldFollowLink:を実装すれば同等のことができます)。
FxLabel
FxLabelは、表示文字列に影をつけたり、グラデーションカラーを適用したりと、見た目をカスタマイズする機能を拡張したUILabelのサブクラスです。
FxLabelを用いると、下記のような効果が得られます。
使用準備
ソースコードを以下のURLよりダウンロード
FXLabel.hをインポート
使い方
文字列に影を付けたい場合は、shadowColor、shadowOffset、shadowBlurプロパティを指定します。
サンプルにあるエンボス効果は、下記のように文字の外側へ白い影をつけ、内側に黒い影をつけることでそれっぽく見せているようです。
グラデーションカラーは、始点の色と終点の色を指定します(グラデーションの方向は、デフォルトではy軸方向)。
グラデーションの方向を指定する場合は始点の座標と終点の座標を指定します。また複数色指定したい場合はgradientColorsプロパティにUIColorの配列をセットします。
まとめ
テキストにフォントや色等の属性を指定したり、リンクを貼ったりできるようになるOHAttributedLabel、TTTAttributedLabelと、文字列にエフェクト効果をかけることのできるFxLabelを紹介しました。