web-dev-qa-db-ja.com

UIBarButtonItemのフォントを変更します

UIToolbar with UIBarButtonItem

DoneというタイトルのUIBarButtonItemUIToolbarがあります。ここで、フォントをデフォルトから "Trebuchet MS"に太字で変更します。どうやってやるの?

129
Ankit Vyas

UIBarButtonItemはUIBarItemを継承するため、試すことができます

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

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

124
teriiehina

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

[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)
206
mask

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

目的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)

Swift 3

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

Swift 4

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

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

Swift 3

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

Swift 4

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

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

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

(iOS7 +用に更新されました)

121
rog

Swiftでは、次のようにこれを実行します。

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

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

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

Swift

  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];
15
Anbu.Karthik

一部のUIBarButtonItemsに対してこれを行うが、すべてではないため、次のアプローチをお勧めします。

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

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

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

Swift 4では、次のコードを追加することにより、UIBarButtonItemのフォントと色を変更できます。

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

これは正しい方法です。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など)および色を好きなように変更できます。このヘルプを願っています:)

2
Fabio

スイフト3

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

アプリ全体:

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

    }
1
Yogesh Lolusare

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

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

次に、カスタムビューに画像、ラベルなどを追加します。

[buttonItemView addSubview:customImage];

[buttonItemView addSubview:customLabel];

...

それをUIBarButtomItemに入れます。

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

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

0
Beppe

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

0
Hiren

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

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

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

0
Nick Lockwood

完了のために、このメソッドを追加したいと思います。これは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];
0
Peter Suwara