Ubah font UIBarButtonItem


139

UIToolbar dengan UIBarButtonItem

Saya memiliki UIBarButtonItemdi SelesaiUIToolbar berjudul saya . Sekarang saya ingin mengubah font dari default menjadi "Trebuchet MS" dengan Bold. Bagaimana saya bisa melakukan itu?

Jawaban:


126

Karena UIBarButtonItem mewarisi dari UIBarItem, Anda dapat mencoba

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

tapi ini hanya untuk iOS5. Untuk iOS 3/4, Anda harus menggunakan tampilan khusus.


214

Lebih tepatnya, ini bisa dilakukan seperti di bawah ini

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

Atau dengan sintaks literal objek:

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

Untuk kenyamanan, inilah implementasi Swift:

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

2
NSFontAttributeName harus digunakan sebagai ganti UITextAttributeFont, dan NSForegroundColorAttributeName seharusnya bukan UITextAttributeTextColor saat mengembangkan untuk IOS7.
Raz

126

Bagi mereka yang tertarik menggunakan UIAppearancegaya UIBarButtonItemfont mereka di seluruh aplikasi, dapat dilakukan dengan menggunakan baris kode ini:

Sasaran 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)

Cepat 3

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

Cepat 4

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

Atau untuk UIBarButtonItem tunggal (tidak untuk semua lebar aplikasi), jika Anda memiliki font khusus untuk satu tombol khususnya:

Cepat 3

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

Cepat 4

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

Tentu saja, Anda dapat mengubah font & ukuran ke apa pun yang Anda suka. Saya lebih suka meletakkan kode ini di AppDelegate.mfile di didFinishLaunchingWithOptionsbagian.

Atribut yang tersedia (tambahkan saja ke NSDictionary):

  • NSFontAttributeName: Ubah font dengan a UIFont
  • NSForegroundColorAttributeName: Ubah warna dengan a UIColor
  • NSShadow: Tambahkan bayangan drop (lihat NSShadowreferensi kelas)

(Diperbarui untuk iOS7 +)


3
Kunci UITextAttribute .. sudah tidak digunakan lagi di iOS7. Gunakan NSFontAttribute ... dan NSForeground ... dll.
Emmanuel Ay

2
Saya telah memperbarui untuk penghentian yang diperkenalkan di iOS7. Terima kasih atas perhatiannya, @EmmanuelAy!
rog

1
Fantastis! Aplikasi saya terlihat cantik sekarang (yah, dengan caranya sendiri !!: P) Terima kasih
Septronic

20

Di Swift Anda akan melakukan ini sebagai berikut:

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

1
Jangan lupa tanda seru (!) Setelah font. Pesan kesalahan: "'_' tidak dapat dikonversi ke 'String'" tidak terlalu membantu.
Ciryon

17

Ini adalah jawaban yang bagus di atas. Hanya memperbarui untuk 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)

cepat

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

Objektif-C

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

8

Untuk melakukan ini untuk beberapa UIBarButtonItemstetapi tidak semua saya merekomendasikan pendekatan berikut.

  1. Buat UIBarButtonItemsubkelas. Jangan menambahkan apa pun ke dalamnya - Anda hanya akan menggunakannya sebagai kelas khusus di storyboard dan untuk proksi penampilannya ...
  2. Di storyboard Anda, ubah kelas khusus untuk semua yang diinginkan UIBarButtonItemske subkelas Anda
  3. Di AppDelegate, impor UIBarButtonItemsubclass Anda dan tambahkan baris berikut keapplication:didFinishLaunchingWithOptions:

Dalam kasus saya, saya membuat subklas UIBarButtonItemdengan tujuan untuk menebalkan teks:

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

8

Di Swift 4 , Anda dapat mengubah font dan warna UIBarButtonItemdengan menambahkan kode berikut.

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

3

Ini adalah cara yang tepat: nyatakan barButtonItem Anda (dalam hal ini rightBarButtonItem) dan tambahkan setTitleTextAttributes.

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

setelah itu kamu bisa menambahkan atribut title

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

Anda dapat mengubah ukuran, berat (.bold, .heavy,. regular, dll.) dan warna yang Anda sukai ... Semoga bantuan ini :)


3

Implementasi Swift 5

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

2

cepat 3

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

1

Seluruh Aplikasi:

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

    }

0

UIBarButtonbelum properti yang terkait dengan perubahan font. Tetapi Anda dapat membuat tombol dengan font khusus lalu menambahkan ke UIBarButton. Mungkin bisa menyelesaikan masalah Anda


0

Dengan asumsi Anda ingin mendukung iOS4 dan sebelumnya, taruhan terbaik Anda adalah membuat tombol bilah menggunakan initWithCustomView:metode dan menyediakan tampilan Anda sendiri yang bisa berupa UIButton di mana Anda dapat dengan mudah menyesuaikan font.

Anda juga dapat menyeret UIButton ke bilah alat atau bilah navigasi di Interface Builder jika Anda ingin membuat tombol dengan drag-and-drop alih-alih secara terprogram.

Sayangnya ini berarti membuat gambar latar tombol sendiri. Tidak ada cara untuk menyesuaikan font UIBarButtonItem standar sebelum iOS5.


0

Anda dapat membuat kustom secara UIViewterprogram:

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

Kemudian tambahkan gambar, label, atau apa pun yang Anda suka ke tampilan kustom Anda:

[buttonItemView addSubview:customImage];

[buttonItemView addSubview:customLabel];

...

Sekarang masukkan ke dalam UIBarButtomItem.

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

Dan akhirnya tambahkan barButtonItem ke bilah navigasi Anda.


0

Untuk penyelesaian saya ingin menambahkan metode ini, masih digunakan di Objective-C pada 2019. :)

_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];
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.