UIBarButtonItemのフォントを変更する


回答:


126

UIBarButtonItemはUIBarItemから継承するので、

- (void)setTitleTextAttributes:(NSDictionary *)attributes
                  forState:(UIControlState)state

ただし、これはiOS5専用です。iOS 3/4の場合、カスタムビューを使用する必要があります。


214

正確には、これは以下のように行うことができます

[buttonItem setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: 
    [UIFont fontWithName:@"Helvetica-Bold" size:26.0], NSFontAttributeName,
    [UIColor greenColor], NSForegroundColorAttributeName,
    nil] 
                          forState:UIControlStateNormal];

または、オブジェクトリテラル構文を使用します。

[buttonItem setTitleTextAttributes:@{
     NSFontAttributeName: [UIFont fontWithName:@"Helvetica-Bold" size:26.0],
     NSForegroundColorAttributeName: [UIColor greenColor]
} forState:UIControlStateNormal];

便宜上、Swift実装を以下に示します。

buttonItem.setTitleTextAttributes([
        NSAttributedStringKey.font: UIFont(name: "Helvetica-Bold", size: 26.0)!,
        NSAttributedStringKey.foregroundColor: UIColor.green],
    for: .normal)

2
IOS7用に開発する場合、UITextAttributeFontの代わりにNSFontAttributeNameを使用し、UITextAttributeTextColorの代わりにNSForegroundColorAttributeNameを使用する必要があります。
Raz

126

を使用UIAppearanceUIBarButtonItemてアプリ全体でフォントのスタイルを設定することに関心がある場合は、次のコード行を使用して実現できます。

目標C:

NSDictionary *barButtonAppearanceDict = @{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Light" size:12.0], NSForegroundColorAttributeName: [UIColor whiteColor]};
[[UIBarButtonItem appearance] setTitleTextAttributes:barButtonAppearanceDict forState:UIControlStateNormal];

Swift 2.3:

UIBarButtonItem.appearance().setTitleTextAttributes(
[
    NSFontAttributeName : UIFont(name: "HelveticaNeue-Light", size: 12)!,
    NSForegroundColorAttributeName : UIColor.white
],
for: .normal)

スウィフト3

UIBarButtonItem.appearance().setTitleTextAttributes(
[
    NSFontAttributeName : UIFont(name: "HelveticaNeue-Light", size: 12)!,
    NSForegroundColorAttributeName : UIColor.white,
], for: .normal)

スウィフト4

UIBarButtonItem.appearance().setTitleTextAttributes(
[
    NSAttributedStringKey.font : UIFont(name: "HelveticaNeue-Light", size: 12)!,
    NSAttributedStringKey.foregroundColor : UIColor.white,
], for: .normal)

または、特に1つのボタンのカスタムフォントがある場合は、単一のUIBarButtonItem(すべてのアプリ全体ではない)の場合:

スウィフト3

let barButtonItem = UIBarButton()
barButtonItem.setTitleTextAttributes([
    NSFontAttributeName : UIFont(name: "FontAwesome", size: 26)!,
    NSForegroundColorAttributeName : UIColor.white,
], for: .normal)
barButtonItem.title = "\u{f02a}"

スウィフト4

let barButtonItem = UIBarButton()
barButtonItem.setTitleTextAttributes([
    NSAttributedStringKey.font : UIFont(name: "FontAwesome", size: 26)!,
    NSAttributedStringKey.foregroundColor : UIColor.white,
], for: .normal)
barButtonItem.title = "\u{f02a}"

もちろん、フォントとサイズを好きなように変更できます。セクションのAppDelegate.mファイルにこのコードを配置することを好みますdidFinishLaunchingWithOptions

利用可能な属性(それらをに追加するだけNSDictionary):

(iOS7以降で更新)


3
UITextAttribute ..キーはiOS7で非推奨になりました。代わりにNSFontAttribute ...やNSForeground ...などを使用してください。
Emmanuel Ay 2014年

2
iOS7で導入された非推奨について更新しました。頭を上げてくれてありがとう、@ EmmanuelAy!
ログ14年

1
素晴らしい!私のアプリは今、美しく見えています(まあ、私のやり方ではそうです!!:P)ありがとう
Septronic 2015年

20

Swiftではこれを次のように行います:

backButtonItem.setTitleTextAttributes([
        NSFontAttributeName : UIFont(name: "Helvetica-Bold", size: 26)!,
        NSForegroundColorAttributeName : UIColor.blackColor()],
    forState: UIControlState.Normal)

1
フォントの後の感嘆符(!)を忘れないでください。エラーメッセージ:「 '_'は 'String'に変換できません」はあまり役に立ちません。
Ciryon

17

これらは上記の素晴らしい答えです。iOS7向けに更新する:

NSDictionary *barButtonAppearanceDict = @{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Thin" size:18.0] , NSForegroundColorAttributeName: [UIColor whiteColor]};
    [[UIBarButtonItem appearance] setTitleTextAttributes:barButtonAppearanceDict forState:UIControlStateNormal];

16

Swift3

  buttonName.setAttributedTitle([
        NSFontAttributeName : UIFont.systemFontOfSize(18.0),
        NSForegroundColorAttributeName : UIColor.red,NSBackgroundColorAttributeName:UIColor.black],
                                     forState: UIControlState.Normal)

迅速

   barbutton.setTitleTextAttributes([
        NSFontAttributeName : UIFont.systemFontOfSize(18.0),
        NSForegroundColorAttributeName : UIColor.redColor(),NSBackgroundColorAttributeName:UIColor.blackColor()],
        forState: UIControlState.Normal)

Objective-C

     [ barbutton setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
        [UIFont fontWithName:@"Helvetica-Bold" size:20.0], NSFontAttributeName,
        [UIColor redColor], NSForegroundColorAttributeName,[UIColor blackColor],NSBackgroundColorAttributeName,
        nil]
        forState:UIControlStateNormal];

8

UIBarButtonItemsすべてではなく一部に対してこれを行うには、次の方法をお勧めします。

  1. UIBarButtonItemサブクラスを作成します。何も追加しないでください-ストーリーボード内の外観クラスとその外観プロキシとしてのみ使用します...
  2. ストーリーボードで、必要なすべてのカスタムクラスをUIBarButtonItemsサブクラスに変更します。
  3. AppDelegateでUIBarButtonItemサブクラスをインポートし、次の行を追加しますapplication:didFinishLaunchingWithOptions:

私の場合UIBarButtonItem、テキストを太字にすることだけを目的としてサブクラス化しました。

[[BoldBarButtonItem appearance] setTitleTextAttributes:
  [NSDictionary dictionaryWithObjectsAndKeys: 
    [UIFont boldSystemFontOfSize:18.0], NSFontAttributeName,nil] 
                                              forState:UIControlStateNormal];

8

スウィフト4、あなたはのフォントや色を変更することができUIBarButtonItem、次のコードを追加して。

addTodoBarButton.setTitleTextAttributes(
        [
        NSAttributedStringKey.font: UIFont(name: "HelveticaNeue-Bold", size: 17)!,
        NSAttributedStringKey.foregroundColor: UIColor.black
        ], for: .normal)

3

これは正しい方法です。barButtonItem(この場合はrightBarButtonItem)を宣言し、setTitleTextAttributesに追加します。

navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Go!", style: .plain, target: self, action: #selector(yourFuncDestination))

タイトル属性を追加した後

navigationItem.rightBarButtonItem?.setTitleTextAttributes([.font : UIFont.systemFont(ofSize: 18, weight: .bold), .foregroundColor : UIColor.white], for: .normal)

サイズ、重さ(.bold、.heavy、.regularなど)と色を好きなように変更できます。


3

Swift 5の実装

rightButtonItem.setTitleTextAttributes([
            NSAttributedString.Key.font: UIFont(name: "Helvetica-Bold", size: 26.0)!,
            NSAttributedString.Key.foregroundColor: UIColor.green],
        for: .normal)

2

迅速3

barButtonName.setTitleTextAttributes( [NSFontAttributeName : UIFont.systemFont(ofSize: 18.0),NSForegroundColorAttributeName : UIColor.white], for: .normal) 

1

アプリ全体:

if let font = UIFont(name: "AvenirNext-DemiBold", size: 15) {
        UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: font,NSForegroundColorAttributeName:TOOLBAR_TITLE_COLOR], forState: UIControlState.Normal)

    }

0

UIBarButtonフォントの変更に関連するプロパティはありません。ただし、カスタムフォントを使用してボタンを作成し、UIBarButtonに追加できます。それはあなたの問題を解決するかもしれません


0

iOS4以前をサポートする場合は、initWithCustomView:メソッドを使用してバーボタンを作成し、フォントを簡単にカスタマイズできるUIButtonのような独自のビューを提供するのが最善の策です。

プログラムではなくドラッグアンドドロップでボタンを作成する場合は、Interface BuilderのツールバーまたはナビゲーションバーにUIButtonをドラッグすることもできます。

残念ながら、これはボタンの背景画像を自分で作成することを意味します。iOS5より前の標準のUIBarButtonItemのフォントをカスタマイズする方法はありません。


0

UIViewプログラムでカスタムを作成できます。

UIView *buttonItemView = [[UIView alloc] initWithFrame:buttonFrame];

次に、画像、ラベル、または好きなものをカスタムビューに追加します。

[buttonItemView addSubview:customImage];

[buttonItemView addSubview:customLabel];

...

今それをあなたの中に入れてくださいUIBarButtomItem

UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:buttonItemView];

最後に、ナビゲーションボタンにbarButtonItemを追加します。


0

完成させるために、私はこのメソッドを追加したいと思います。2019年もObjective-Cで使用されています。:)

_titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
_titleLabel.text = _titleBarButtonItem.title;
_titleLabel.textColor = UIColor.whiteColor;
_titleLabel.font = [UtilityMethods appFontProDisplayBold:26.0];

[_titleLabel sizeToFit];
UIBarButtonItem *titleLabelItem = [[UIBarButtonItem alloc] initWithCustomView:_titleLabel];
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.