Thay đổi phông chữ của UIBarButtonItem


139

Thanh UITool với UIBarButtonItem

Tôi có một UIBarButtonItemtrong UIToolbartiêu đề Xong của tôi . Bây giờ tôi muốn thay đổi phông chữ từ mặc định thành "Trebuchet MS" bằng Bold. Làm thế nào tôi có thể làm điều đó?

Câu trả lời:


126

Vì UIBarButtonItem kế thừa từ UIBarItem, bạn có thể thử

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

nhưng đây chỉ dành cho iOS5. Đối với iOS 3/4, bạn sẽ phải sử dụng chế độ xem tùy chỉnh.


214

Nói chính xác, điều này có thể được thực hiện như dưới đây

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

Hoặc với cú pháp nghĩa đen của đối tượng:

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

Để thuận tiện, đây là triển khai Swift:

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

2
Nên sử dụng NSFontAttributionName thay vì UITextAttributionFont và NSForegroundColorAttributionName thay vì UITextAttributionTextColor khi phát triển cho IOS7.
Raz

126

Đối với những người quan tâm đến việc sử dụng UIAppearanceđể tạo kiểu cho UIBarButtonItemphông chữ của họ trong suốt ứng dụng, có thể thực hiện bằng cách sử dụng dòng mã này:

Mục tiêu 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)

Hoặc đối với một UIBarButtonItem (không dành cho tất cả các ứng dụng), nếu bạn có một phông chữ tùy chỉnh cho một nút cụ thể:

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}"

Tất nhiên, bạn có thể thay đổi phông chữ & kích thước thành bất cứ thứ gì bạn thích. Tôi thích đặt mã này trong AppDelegate.mtập tin trong didFinishLaunchingWithOptionsphần.

Thuộc tính có sẵn (chỉ cần thêm chúng vào NSDictionary):

  • NSFontAttributeName: Thay đổi phông chữ bằng một UIFont
  • NSForegroundColorAttributeName: Thay đổi màu sắc bằng một UIColor
  • NSShadow: Thêm một bóng thả (xem NSShadowtài liệu tham khảo lớp)

(Đã cập nhật cho iOS7 +)


3
Các khóa UITextAttribution .. không được dùng kể từ iOS7. Thay vào đó, hãy sử dụng NSFontAttribution ... và NSForeground ... vv.
Emmanuel Ay

2
Tôi đã cập nhật cho các khấu hao được giới thiệu trong iOS7. Cảm ơn vì đã ngẩng cao đầu, @EmmanuelAy!
rog

1
Tuyệt diệu! Ứng dụng của tôi được nhìn đẹp bây giờ (tốt, theo cách riêng của tôi đó là !!: P) Cảm ơn bạn
Septronic

20

Trong Swift bạn sẽ làm điều này như sau:

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

1
Đừng quên dấu chấm than (!) Sau phông chữ. Thông báo lỗi: "'_' không thể chuyển đổi thành 'Chuỗi'" không thực sự hữu ích.
Ciryon

17

Đây là những câu trả lời tuyệt vời ở trên. Chỉ cần cập nhật cho 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)

nhanh

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

Mục tiêu-C

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

8

Để làm điều này cho một số UIBarButtonItemsnhưng không phải tất cả tôi đề nghị cách tiếp cận sau đây.

  1. Tạo một UIBarButtonItemlớp con. Đừng thêm bất cứ thứ gì vào nó - bạn sẽ chỉ sử dụng nó như một lớp tùy chỉnh trong bảng phân cảnh và cho proxy xuất hiện của nó ...
  2. Trong bảng phân cảnh của bạn, thay đổi lớp tùy chỉnh cho tất cả mong muốn UIBarButtonItemscho lớp con của bạn
  3. Trong AppDelegate của bạn, nhập UIBarButtonItemlớp con của bạn và thêm dòng sau vàoapplication:didFinishLaunchingWithOptions:

Trong trường hợp của tôi, tôi phân lớp UIBarButtonItemcho mục đích duy nhất là làm mờ văn bản:

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

8

Trong Swift 4 , bạn có thể thay đổi phông chữ và màu sắc UIBarButtonItembằng cách thêm mã sau đây.

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

3

Đây là cách đúng: khai báo barButtonItem của bạn (trong trường hợp này là rightBarButtonItem) và thêm nó setTitleTextAttribut.

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

sau khi bạn có thể thêm thuộc tính tiêu đề

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

bạn có thể thay đổi kích thước, trọng lượng (.bold, .ematvy, không thường xuyên, v.v.) và màu sắc như thế nào bạn thích ... Hy vọng điều này sẽ giúp :)


3

Thực hiện Swift 5

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

2

nhanh 3

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

1

Trong suốt ứng dụng:

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

    }

0

UIBarButtontài sản không có liên quan để thay đổi phông chữ. Nhưng bạn có thể tạo một nút với phông chữ tùy chỉnh và sau đó thêm vào UIBarButton. Nó có thể được giải quyết vấn đề của bạn


0

Giả sử bạn muốn hỗ trợ iOS4 trở về trước, cách tốt nhất của bạn là tạo một nút thanh bằng initWithCustomView:phương pháp và cung cấp chế độ xem của riêng bạn, có thể giống như một UIButton nơi bạn có thể dễ dàng tùy chỉnh phông chữ.

Bạn cũng có thể kéo UIButton lên thanh công cụ hoặc thanh điều hướng trong Trình tạo giao diện nếu bạn muốn tạo nút bằng cách kéo và thả thay vì lập trình.

Thật không may, điều này có nghĩa là tự tạo hình nền nút. Không có cách nào để tùy chỉnh phông chữ của một UIBarButtonItem tiêu chuẩn trước iOS5.


0

Bạn có thể tạo một tùy chỉnh theo UIViewchương trình:

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

Sau đó thêm hình ảnh, nhãn hoặc bất cứ thứ gì bạn thích vào chế độ xem tùy chỉnh của bạn:

[buttonItemView addSubview:customImage];

[buttonItemView addSubview:customLabel];

...

Bây giờ đặt nó trong của bạn UIBarButtomItem.

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

Và cuối cùng thêm barButtonItem vào thanh điều hướng của bạn.


0

Để hoàn thành tôi muốn thêm phương thức này, vẫn được sử dụng trong Objective-C vào năm 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];
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.