เปลี่ยนแบบอักษรของ UIBarButtonItem


139

UIToolbar กับ UIBarButtonItem

ฉันมีUIBarButtonItemในUIToolbarชื่อของฉันเสร็จแล้ว ตอนนี้ฉันต้องการเปลี่ยนแบบอักษรจากค่าเริ่มต้นเป็น"Trebuchet MS"ด้วยตัวหนา ฉันจะทำสิ่งนั้นได้อย่างไร

คำตอบ:


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
ควรใช้ NSFontAttributeName แทน UITextAttributeFont และ NSForegroundColorAttributeName ควรแทน UITextAttributeTextColor เมื่อพัฒนาสำหรับ IOS7
Raz

126

สำหรับผู้ที่สนใจใช้UIAppearanceสไตล์UIBarButtonItemฟอนต์ของพวกเขาทั่วทั้งแอพสามารถทำได้โดยใช้รหัสบรรทัดนี้:

วัตถุประสงค์ C:

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

สวิฟท์ 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)

หรือสำหรับ 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

2
ฉันได้อัปเดตสำหรับการเสื่อมราคาที่แนะนำใน iOS7 ขอบคุณที่เฮด @EmmanuelAy!
rog

1
Fantastic! แอพของฉันดูสวยงามในตอนนี้ (ในทางของตัวเองนั่นคือ !!: P) ขอบคุณ
ก.ย. 30

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:

ในกรณีของฉันฉัน subclassed UIBarButtonItemเพื่อวัตถุประสงค์ในการ bolding ข้อความเท่านั้น:

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

8

ในSwift 4คุณสามารถเปลี่ยนแบบอักษรและสีของUIBarButtonItemโดยการเพิ่มรหัสต่อไปนี้

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

4

นี่เป็นวิธีที่ถูกต้อง: ประกาศ 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)

คุณสามารถเปลี่ยนขนาดน้ำหนัก (. หนา,. หนัก,. ปกติ ฯลฯ ) และสีที่คุณต้องการ ... หวังว่าจะช่วย :)


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 ที่คุณสามารถปรับแต่งแบบอักษรได้อย่างง่ายดาย

คุณยังสามารถลาก UIButton ไปยังแถบเครื่องมือหรือแถบนำทางใน Interface Builder ได้หากคุณต้องการสร้างปุ่มด้วยการลากแล้วปล่อยแทนที่จะเป็นแบบโปรแกรม

น่าเสียดายที่นี่หมายถึงการสร้างภาพพื้นหลังของปุ่มด้วยตัวคุณเอง ไม่มีวิธีปรับแต่งแบบอักษรของ UIBarButtonItem มาตรฐานก่อน iOS5


0

คุณสามารถสร้างแบบกำหนดเองโดยทางUIViewโปรแกรม:

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

จากนั้นเพิ่มรูปภาพป้ายกำกับหรืออะไรก็ตามที่คุณชอบในมุมมองที่กำหนดเอง:

[buttonItemView addSubview:customImage];

[buttonItemView addSubview:customLabel];

...

UIBarButtomItemตอนนี้ใส่ไว้ในของคุณ

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

และในที่สุดก็เพิ่ม barButtonItem ให้กับแถบนำทางของคุณ


0

เพื่อความสมบูรณ์ฉันต้องการเพิ่มวิธีนี้ยังคงใช้ใน Objective-C ในปี 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];
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.