Mam UIBarButtonItem
w UIToolbar
tytule Gotowe . Teraz chcę zmienić czcionkę z domyślnej na „Trebuchet MS” za pomocą pogrubienia. Jak mogę to zrobić?
Mam UIBarButtonItem
w UIToolbar
tytule Gotowe . Teraz chcę zmienić czcionkę z domyślnej na „Trebuchet MS” za pomocą pogrubienia. Jak mogę to zrobić?
Odpowiedzi:
Ponieważ UIBarButtonItem dziedziczy po UIBarItem, możesz spróbować
- (void)setTitleTextAttributes:(NSDictionary *)attributes
forState:(UIControlState)state
ale to jest tylko dla iOS5. W przypadku iOS 3/4 będziesz musiał użyć widoku niestandardowego.
Aby być precyzyjnym, można to zrobić jak poniżej
[buttonItem setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
[UIFont fontWithName:@"Helvetica-Bold" size:26.0], NSFontAttributeName,
[UIColor greenColor], NSForegroundColorAttributeName,
nil]
forState:UIControlStateNormal];
Lub za pomocą składni literału obiektowego:
[buttonItem setTitleTextAttributes:@{
NSFontAttributeName: [UIFont fontWithName:@"Helvetica-Bold" size:26.0],
NSForegroundColorAttributeName: [UIColor greenColor]
} forState:UIControlStateNormal];
Dla wygody oto implementacja Swift:
buttonItem.setTitleTextAttributes([
NSAttributedStringKey.font: UIFont(name: "Helvetica-Bold", size: 26.0)!,
NSAttributedStringKey.foregroundColor: UIColor.green],
for: .normal)
Dla zainteresowanych używaniem UIAppearance
do stylizacji ichUIBarButtonItem
czcionek w całej aplikacji mogą skorzystać z następującego wiersza kodu:
Cel 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)
Szybki 3
UIBarButtonItem.appearance().setTitleTextAttributes(
[
NSFontAttributeName : UIFont(name: "HelveticaNeue-Light", size: 12)!,
NSForegroundColorAttributeName : UIColor.white,
], for: .normal)
Szybki 4
UIBarButtonItem.appearance().setTitleTextAttributes(
[
NSAttributedStringKey.font : UIFont(name: "HelveticaNeue-Light", size: 12)!,
NSAttributedStringKey.foregroundColor : UIColor.white,
], for: .normal)
Lub dla pojedynczego UIBarButtonItem (nie dla całej aplikacji), jeśli masz niestandardową czcionkę w szczególności dla jednego przycisku:
Szybki 3
let barButtonItem = UIBarButton()
barButtonItem.setTitleTextAttributes([
NSFontAttributeName : UIFont(name: "FontAwesome", size: 26)!,
NSForegroundColorAttributeName : UIColor.white,
], for: .normal)
barButtonItem.title = "\u{f02a}"
Szybki 4
let barButtonItem = UIBarButton()
barButtonItem.setTitleTextAttributes([
NSAttributedStringKey.font : UIFont(name: "FontAwesome", size: 26)!,
NSAttributedStringKey.foregroundColor : UIColor.white,
], for: .normal)
barButtonItem.title = "\u{f02a}"
Oczywiście możesz zmienić czcionkę i rozmiar na dowolne. Wolę umieścić ten kod w AppDelegate.m
pliku w didFinishLaunchingWithOptions
sekcji.
Dostępne atrybuty (wystarczy dodać je do NSDictionary
):
NSFontAttributeName
: Zmień czcionkę za pomocą UIFont
NSForegroundColorAttributeName
: Zmień kolor za pomocą UIColor
NSShadow
: Dodaj cień (zobacz informacje o NSShadow
klasie)(Zaktualizowano dla iOS7 +)
W Swift zrobiłbyś to w następujący sposób:
backButtonItem.setTitleTextAttributes([
NSFontAttributeName : UIFont(name: "Helvetica-Bold", size: 26)!,
NSForegroundColorAttributeName : UIColor.blackColor()],
forState: UIControlState.Normal)
To są świetne odpowiedzi powyżej. Aktualizuję tylko dla iOS7:
NSDictionary *barButtonAppearanceDict = @{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Thin" size:18.0] , NSForegroundColorAttributeName: [UIColor whiteColor]};
[[UIBarButtonItem appearance] setTitleTextAttributes:barButtonAppearanceDict forState:UIControlStateNormal];
Swift3
buttonName.setAttributedTitle([
NSFontAttributeName : UIFont.systemFontOfSize(18.0),
NSForegroundColorAttributeName : UIColor.red,NSBackgroundColorAttributeName:UIColor.black],
forState: UIControlState.Normal)
szybki
barbutton.setTitleTextAttributes([
NSFontAttributeName : UIFont.systemFontOfSize(18.0),
NSForegroundColorAttributeName : UIColor.redColor(),NSBackgroundColorAttributeName:UIColor.blackColor()],
forState: UIControlState.Normal)
Cel C
[ barbutton setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
[UIFont fontWithName:@"Helvetica-Bold" size:20.0], NSFontAttributeName,
[UIColor redColor], NSForegroundColorAttributeName,[UIColor blackColor],NSBackgroundColorAttributeName,
nil]
forState:UIControlStateNormal];
Aby to zrobić dla niektórych, UIBarButtonItems
ale nie dla wszystkich, zalecam następujące podejście.
UIBarButtonItem
podklasę. Nie dodawaj niczego do tego - będziesz go używać tylko jako niestandardowej klasy w scenorysie i do jego wyglądu proxy ...UIBarButtonItems
w podklasieUIBarButtonItem
podklasę i dodaj następujący wiersz doapplication:didFinishLaunchingWithOptions:
W moim przypadku utworzyłem podklasę UIBarButtonItem
wyłącznie w celu pogrubienia tekstu:
[[BoldBarButtonItem appearance] setTitleTextAttributes:
[NSDictionary dictionaryWithObjectsAndKeys:
[UIFont boldSystemFontOfSize:18.0], NSFontAttributeName,nil]
forState:UIControlStateNormal];
W Swift 4 możesz zmienić czcionkę i kolor UIBarButtonItem
, dodając następujący kod.
addTodoBarButton.setTitleTextAttributes(
[
NSAttributedStringKey.font: UIFont(name: "HelveticaNeue-Bold", size: 17)!,
NSAttributedStringKey.foregroundColor: UIColor.black
], for: .normal)
To jest właściwy sposób: zadeklaruj swój barButtonItem (w tym przypadku rightBarButtonItem) i dodaj go setTitleTextAttributes.
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Go!", style: .plain, target: self, action: #selector(yourFuncDestination))
po dodaniu atrybutów tytułu
navigationItem.rightBarButtonItem?.setTitleTextAttributes([.font : UIFont.systemFont(ofSize: 18, weight: .bold), .foregroundColor : UIColor.white], for: .normal)
możesz zmienić rozmiar, wagę (pogrubiony, ciężki, regularny itp.) i kolor, jak wolisz ... Mam nadzieję, że to pomoże :)
Wdrożenie Swift 5
rightButtonItem.setTitleTextAttributes([
NSAttributedString.Key.font: UIFont(name: "Helvetica-Bold", size: 26.0)!,
NSAttributedString.Key.foregroundColor: UIColor.green],
for: .normal)
W całej aplikacji:
if let font = UIFont(name: "AvenirNext-DemiBold", size: 15) {
UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: font,NSForegroundColorAttributeName:TOOLBAR_TITLE_COLOR], forState: UIControlState.Normal)
}
Zakładając, że chcesz obsługiwać system iOS4 i wcześniejsze, najlepszym rozwiązaniem jest utworzenie przycisku paska za pomocą tej initWithCustomView:
metody i dostarczenie własnego widoku, który może być czymś w rodzaju przycisku UIButton, w którym można łatwo dostosować czcionkę.
Możesz także przeciągnąć przycisk UIButton na pasek narzędzi lub pasek nawigacji w programie Interface Builder, jeśli chcesz utworzyć przycisk za pomocą metody przeciągnij i upuść zamiast programistycznie.
Niestety oznacza to samodzielne tworzenie obrazu tła przycisku. Nie ma możliwości dostosowania czcionki standardowego UIBarButtonItem przed iOS5.
Możesz utworzyć program niestandardowy UIView
:
UIView *buttonItemView = [[UIView alloc] initWithFrame:buttonFrame];
Następnie dodaj obrazy, etykiety lub cokolwiek chcesz do swojego widoku niestandardowego:
[buttonItemView addSubview:customImage];
[buttonItemView addSubview:customLabel];
...
Teraz umieść to w swoim UIBarButtomItem
.
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:buttonItemView];
I na koniec dodaj barButtonItem do paska nawigacji.
Na zakończenie chciałbym dodać tę metodę, nadal używaną w Objective-C w 2019 roku. :)
_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];