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?

Ankit Vyas
sumber

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.

teriiehina
sumber
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)
topeng
sumber
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 +)

rog
sumber
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)
Antoine
sumber
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];
Si kakek tua
sumber
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];
Anbu.Karthik
sumber
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];
Kyle Clegg
sumber
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)
Vinoth Vino
sumber
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 :)

Fabio
sumber
3

Implementasi Swift 5

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

cepat 3

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

Seluruh Aplikasi:

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

    }
Yogesh Lolusare
sumber
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

Hiren
sumber
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.

Nick Lockwood
sumber
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.

Giuseppe Garassino
sumber
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];
Peter Suwara
sumber