UIButtonで作成したボタンのラベル文字列の外見を変える方法について解説します。
ラベル文字列の外見を変えるには、いくつかの方法があります。
UIButtonの関数を利用して、ラベル文字列の色や影の色を変更します。
setTitleColor:forState:
setTitleColor:forState:関数の公式リファレンス
setTitleShadowColor:forState:
setTitleShadowColor:forState:関数の公式リファレンス
影の色を設定する場合は、titleLabel.shadowOffsetプロパティを利用して影の表示位置を指定します。
[ buttonA setTitleColor:[ UIColor redColor ] forState:UIControlStateNormal ];
[ buttonA setTitleShadowColor:[ UIColor grayColor ] forState:UIControlStateNormal ];
buttonA.titleLabel.shadowOffset = CGSizeMake( 1, 1 );
titleLabelプロパティを利用して、フォントなどの細かい表示形式を変更することができます。
buttonA.titleLabel.font = [ UIFont fontWithName:@"Zapfino" size:11 ];
titleLabelプロパティはUILabel型です。UILabelの様々なプロパティを利用してラベル文字列の見栄えを変更できます。ただし、UILabel一部のプロパティは設定してもボタンの外見には反映されません。
UILabelのプロパティ | 説明 | UIButtonでの利用可否 |
---|---|---|
text | ラベル文字列 | 不可。UIButtonのsetTitle |
font | フォント | 利用可能 |
textColor | 文字列の色 | 不可。UIButtonのsetTitleColor |
text | 文字列の表示位置 | 不可。 |
line | 改行モード | 利用可能 |
adjusts | フォント自動縮小 | 利用可能 |
baseline | フォント自動縮小時の配置位置 | 利用可能 |
minimum | フォント自動縮小時の最小フォントサイズ | 利用可能 |
number | 行数 | 利用可能 |
highlighted | ハイライト時の文字列の色 | 不可。UIButtonのsetTitleColor |
shadow | 文字列の影の色 | 不可。UIButtonのsetTitleShadowColor |
shadow | 文字列の影の表示位置 | 利用可能 |
titleLabel.fontプロパティを利用してラベル文字列のフォントを変更できます。また、setTitleColor:forState:関数/setTitleShadowColor:forState:関数でラベル文字列の色/影の色を変更できます。
影の表示位置を指定するtitleLabel.shadowOffsetプロパティは、初期状態で(0,0)となっており初期状態では影が文字の後ろに隠れてしまいます。ラベル文字列の影を表示するには、titleLabel.shadowOffsetプロパティを明示的に指定します。
UIButton * buttonA = [ UIButton buttonWithType:UIButtonTypeRoundedRect ];
[ buttonA setTitle:@"Font Sample Button" forState:UIControlStateNormal ];
buttonA.titleLabel.font = [ UIFont fontWithName:@"Zapfino" size:11 ];
[ buttonA setTitleColor:[ UIColor redColor ] forState:UIControlStateNormal ];
[ buttonA setTitleShadowColor:[ UIColor grayColor ] forState:UIControlStateNormal ];
buttonA.titleLabel.shadowOffset = CGSizeMake( 1, 1 );
titleLabel.adjustsFontSizeToFitWidthプロパティをYESに設定すると、ラベル文字列の長さに応じて自動的にフォントサイズが調整されます。
titleLabel.minimumFontSizeプロパティには最小フォントサイズを指定します。フォントサイズが自動調整されても、titleLabel.minimumFontSizeで指定したフォントサイズより小さくなりません。
ラベル文字列がボタンをはみ出る場合は、titleLabel.lineBreakModeプロパティで指定された動作でテキストを表示します。たとえばUILineBreakModeTailTruncationを指定するとテキスト末尾を「...」で省略して表示します。
UIButton * buttonB = [ UIButton buttonWithType:UIButtonTypeRoundedRect ];
[ buttonB setTitle:@"長いテキスト文字列の自動調節 テスト" forState:UIControlStateNormal ];
buttonB.titleLabel.adjustsFontSizeToFitWidth = YES;
buttonB.titleLabel.baselineAdjustment = UIBaselineAdjustmentAlignCenters;
buttonB.titleLabel.minimumFontSize = 8;
buttonB.titleLabel.lineBreakMode = UILineBreakModeTailTruncation;
titleLabel.numberOfLinesプロパティに表示したい最大行数を、titleLabel.lineBreakModeプロパティに改行モードを指定すると、ラベル文字列が複数行で表示されます。
UIButton * buttonC = [ UIButton buttonWithType:UIButtonTypeRoundedRect ];
[ buttonC setTitle:@"複数行のテキスト文字列のサンプル あいうえおかきくけこさしすせそ1234567890"
forState:UIControlStateNormal ];
buttonC.titleLabel.lineBreakMode = UILineBreakModeWordWrap;
buttonC.titleLabel.numberOfLines = 3;
iOS 3.0でtitleLabelプロパティが導入されたことにより、以前からあったUIButtonのfont/lineBreakMode/titleShadowOffsetプロパティの利用は非推奨となりました。代わりにtitleLabelのプロパティを利用します。
非推奨になった | 代用手段 |
---|---|
UIButton | UIButton |
UIButton | UIButton |
UIButton | UIButton |