UIBarButtonItem의 글꼴 변경


139

UIBarButtonItem이있는 UIToolbar

나는이 UIBarButtonItem내가에 UIToolbar제목 완료 . 이제 Bold 를 사용하여 글꼴을 기본값에서 "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
UITextAttributeFont 대신 NSFontAttributeName을 사용해야하고, IOS7 용으로 개발할 때 NSForegroundColorAttributeName은 UITextAttributeTextColor 대신 사용해야합니다.
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) :

  • NSFontAttributeName:로 글꼴 변경 UIFont
  • NSForegroundColorAttributeName:로 색상 변경 UIColor
  • NSShadow: 그림자 추가 ( NSShadow클래스 참조 참조)

(iOS7 + 용으로 업데이트)


3
UITextAttribute .. 키는 iOS7부터 더 이상 사용되지 않습니다. 대신 NSFontAttribute ... 및 NSForeground ... 등을 사용하십시오.
Emmanuel Ay

2
iOS7에 도입 된 지원 중단에 대해 업데이트했습니다. @EmmanuelAy 감사합니다!
rog

1
환상적인! 내 응용 프로그램은 지금 아름답게 보이고 있습니다 (잘, 내 자신의 방식으로 !! : P) 감사합니다
Septronic

20

Swift에서는 다음과 같이하면됩니다.

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

1
글꼴 다음에 느낌표 (!)를 잊지 마십시오. 오류 메시지 : " '_'은 (는) '문자열'로 변환 할 수 없습니다" "는 실제로 도움이되지 않습니다.
Ciryon

17

이것들은 위의 훌륭한 답변입니다. iOS7 용으로 업데이트 중 :

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

16

스위프트 3

  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)

목표 -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:

필자의 경우 UIBarButtonItem텍스트를 굵게 표시하기 위해 하위 클래스로 분류 했습니다.

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

크기, 무게 (.bold, .heavy, .regular 등)와 원하는 색상을 변경할 수 있습니다.


3

스위프트 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과 같은 자체보기를 제공하는 것입니다.

프로그래밍 방식이 아닌 끌어서 놓기로 버튼을 만들려는 경우 Interface Builder의 도구 모음 또는 탐색 모음으로 UIButton을 끌 수도 있습니다.

불행히도 이것은 버튼 배경 이미지를 직접 만드는 것을 의미합니다. iOS5 이전에는 표준 UIBarButtonItem의 글꼴을 사용자 정의 할 방법이 없습니다.


0

UIView프로그래밍 방식 으로 사용자 정의를 만들 수 있습니다 .

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

그런 다음 이미지, 레이블 또는 원하는 것을 사용자 정의보기에 추가하십시오.

[buttonItemView addSubview:customImage];

[buttonItemView addSubview:customLabel];

...

이제 당신의에 넣어 UIBarButtomItem.

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

마지막으로 탐색 막대에 barButtonItem을 추가하십시오.


0

완료를 위해 2019 년 Objective-C에서 여전히 사용되는이 방법을 추가하고 싶습니다. :)

_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.