UIBarButtonItem'in yazı tipini değiştirme


139

UIBarButtonItem ile UIToolbar

Bir var UIBarButtonItembenim de UIToolbarbaşlıklı Yapıldı . Şimdi yazı tipini varsayılandan Bold ile "Trebuchet MS" olarak değiştirmek istiyorum . Bunu nasıl yapabilirim?

Yanıtlar:


126

UIBarButtonItem, UIBarItem'den miras aldığı için deneyebilirsiniz

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

ancak bu yalnızca iOS5 içindir. İOS 3/4 için özel bir görünüm kullanmanız gerekir.


214

Kesin olmak gerekirse, bu aşağıdaki gibi yapılabilir

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

Veya nesne değişmez sözdizimi ile:

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

Kolaylık sağlamak için Swift uygulaması:

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

2
UITextAttributeFont yerine NSFontAttributeName kullanılmalı ve IOS7 için geliştirilirken UITextAttributeTextColor yerine NSForegroundColorAttributeName kullanılmalıdır.
Raz

126

Kullanarak ilgilenen olanlar için UIAppearancestiline kendi UIBarButtonItemapp boyunca 'ın fontları, bu kod satırı kullanılarak gerçekleştirilebilir:

Hedef C:

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

Hızlı 2.3:

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

Hızlı 3

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

Hızlı 4

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

Veya tek bir UIBarButtonItem için (tüm uygulama için değil), özellikle bir düğme için özel bir yazı tipiniz varsa:

Hızlı 3

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

Hızlı 4

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

Tabii ki, yazı tipini ve boyutunu istediğiniz gibi değiştirebilirsiniz. Bu kodu bölümdeki AppDelegate.mdosyaya koymayı tercih ederim didFinishLaunchingWithOptions.

Kullanılabilir öznitelikler (yalnızca şuraya ekleyin NSDictionary):

  • NSFontAttributeName: Yazı tipini bir UIFont
  • NSForegroundColorAttributeName: İle renk değiştirme UIColor
  • NSShadow: Alt gölge ekleyin ( sınıf referansına bakın NSShadow)

(İOS7 + için güncellendi)


3
UITextAttribute .. tuşları iOS7'den itibaren kullanımdan kaldırılmıştır. Bunun yerine NSFontAttribute ... ve NSForeground ... etc kullanın.
Emmanuel Ay

2
İOS7'de sunulan kullanımdan kaldırmalar için güncelleme yaptım. Uyarı için teşekkürler, @EmmanuelAy!
rog

1
Fantastik! Benim app şimdi güzel görünüyor (iyi, kendi şekilde bu !!: P) Teşekkür ederim
Septronic

20

Swift'te bunu şu şekilde yaparsınız:

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

1
Yazı tipinden sonra ünlem işaretini (!) Unutmayın. Hata mesajı: "'_' 'String' 'e dönüştürülemez.
Ciryon

17

Bunlar yukarıdaki harika cevaplar. Sadece iOS7 için güncelleme:

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)

hızlı

   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

Bunu yapmak için bazıları UIBarButtonItemsdeğil ama hepsi için aşağıdaki yaklaşımı öneririm.

  1. Bir UIBarButtonItemalt sınıf oluşturun . Ona hiçbir şey eklemeyin - bunu yalnızca film şeridinde özel bir sınıf olarak ve görünüm proxy'si için kullanacaksınız ...
  2. Film şeridinizde, istediğiniz herkes için özel sınıfı UIBarButtonItemsalt sınıfınıza değiştirin
  3. AppDelegate'inizde UIBarButtonItemalt sınıfınızı içe aktarın ve aşağıdaki satırı ekleyinapplication:didFinishLaunchingWithOptions:

Benim durumumda UIBarButtonItem, yalnızca metni kalınlaştırmak amacıyla alt sınıflara ayırdım:

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

8

In Swift 4 , sen yazı tipini ve rengini değiştirebilirsiniz UIBarButtonItemaşağıdaki kodu ekleyerek.

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

4

Bu doğru yoldur: barButtonItem'inizi (bu durumda rightBarButtonItem) bildirin ve setTitleTextAttributes ekleyin.

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

başlık özellikleri ekledikten sonra

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

boyutunu, ağırlığını (.bold, .heavy, .regular vb.) ve tercih ettiğiniz rengi değiştirebilirsiniz ... Umarım bu yardım :)


3

Swift 5 Uygulaması

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

2

hızlı 3

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

1

Uygulama Boyunca:

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

    }

0

UIBarButtonyazı tipini değiştirmekle ilgili mülk yok. Ancak özel yazı tipiyle bir düğme oluşturabilir ve sonra UIBarButton'a ekleyebilirsiniz. Sorununuzu çözebilir


0

İOS4 ve önceki sürümlerini desteklemek istediğinizi varsayarsak, en iyi seçeneğiniz initWithCustomView:yöntemi kullanarak bir çubuk düğmesi oluşturmak ve yazı tipinizi kolayca özelleştirebileceğiniz bir UIButton gibi bir şey olabilecek kendi görünümünüzü sağlamaktır.

Düğmeyi programlı yerine sürükleyip bırakarak oluşturmak istiyorsanız, bir UIButton'u Arayüz Oluşturucu'da bir araç çubuğuna veya gezinme çubuğuna da sürükleyebilirsiniz.

Ne yazık ki bu düğme arka plan resmini kendiniz oluşturmak anlamına gelir. İOS5'ten önce standart bir UIBarButtonItem'in yazı tipini özelleştirmenin bir yolu yoktur.


0

UIViewProgramlı olarak özel bir öğe oluşturabilirsiniz :

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

Ardından özel görünümünüze resim, etiket veya istediğinizi ekleyin:

[buttonItemView addSubview:customImage];

[buttonItemView addSubview:customLabel];

...

Şimdi içine koy UIBarButtomItem.

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

Ve son olarak gezinti çubuğuna barButtonItem ekleyin.


0

Tamamlanması için hala 2019'da Objective-C'de kullanılan bu yöntemi eklemek istiyorum. :)

_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];
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.