Ho un UIBarButtonItem
mio UIToolbar
Intitolato Fatto . Ora voglio cambiare il carattere dal default a "Trebuchet MS" con Bold. Come lo posso fare?
Ho un UIBarButtonItem
mio UIToolbar
Intitolato Fatto . Ora voglio cambiare il carattere dal default a "Trebuchet MS" con Bold. Come lo posso fare?
Risposte:
Poiché UIBarButtonItem eredita da UIBarItem, puoi provare
- (void)setTitleTextAttributes:(NSDictionary *)attributes
forState:(UIControlState)state
ma questo è solo per iOS5. Per iOS 3/4, dovrai utilizzare una vista personalizzata.
Per essere precisi, questo può essere fatto come di seguito
[buttonItem setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
[UIFont fontWithName:@"Helvetica-Bold" size:26.0], NSFontAttributeName,
[UIColor greenColor], NSForegroundColorAttributeName,
nil]
forState:UIControlStateNormal];
O con la sintassi letterale dell'oggetto:
[buttonItem setTitleTextAttributes:@{
NSFontAttributeName: [UIFont fontWithName:@"Helvetica-Bold" size:26.0],
NSForegroundColorAttributeName: [UIColor greenColor]
} forState:UIControlStateNormal];
Per comodità, ecco l'implementazione di Swift:
buttonItem.setTitleTextAttributes([
NSAttributedStringKey.font: UIFont(name: "Helvetica-Bold", size: 26.0)!,
NSAttributedStringKey.foregroundColor: UIColor.green],
for: .normal)
Per coloro che sono interessati a utilizzare UIAppearance
lo stile dei propri UIBarButtonItem
caratteri in tutta l'app, può essere realizzato utilizzando questa riga di codice:
Obiettivo 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)
O per un singolo UIBarButtonItem (non per tutta l'app), se hai un carattere personalizzato per un pulsante in particolare:
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}"
Ovviamente, puoi modificare il carattere e le dimensioni in base alle tue esigenze. Preferisco inserire questo codice nel AppDelegate.m
file nella didFinishLaunchingWithOptions
sezione.
Attributi disponibili (basta aggiungerli a NSDictionary
):
NSFontAttributeName
: Cambia carattere con a UIFont
NSForegroundColorAttributeName
: Cambia colore con a UIColor
NSShadow
: Aggiungi un'ombra discendente (vedi NSShadow
riferimento alla classe)(Aggiornato per iOS7 +)
In Swift lo faresti come segue:
backButtonItem.setTitleTextAttributes([
NSFontAttributeName : UIFont(name: "Helvetica-Bold", size: 26)!,
NSForegroundColorAttributeName : UIColor.blackColor()],
forState: UIControlState.Normal)
Queste sono ottime risposte sopra. Solo aggiornamento per 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)
veloce
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];
Per fare questo per alcuni, UIBarButtonItems
ma non per tutti, consiglio il seguente approccio.
UIBarButtonItem
sottoclasse. Non aggiungere nulla ad esso: lo utilizzerai solo come classe personalizzata nello storyboard e per il suo proxy di aspetto ...UIBarButtonItems
nella sottoclasseUIBarButtonItem
sottoclasse e aggiungi la seguente riga aapplication:didFinishLaunchingWithOptions:
Nel mio caso ho eseguito UIBarButtonItem
una sottoclasse al solo scopo di mettere in grassetto il testo:
[[BoldBarButtonItem appearance] setTitleTextAttributes:
[NSDictionary dictionaryWithObjectsAndKeys:
[UIFont boldSystemFontOfSize:18.0], NSFontAttributeName,nil]
forState:UIControlStateNormal];
In Swift 4 , puoi modificare il carattere e il colore di UIBarButtonItem
aggiungendo il seguente codice.
addTodoBarButton.setTitleTextAttributes(
[
NSAttributedStringKey.font: UIFont(name: "HelveticaNeue-Bold", size: 17)!,
NSAttributedStringKey.foregroundColor: UIColor.black
], for: .normal)
Questo è il modo giusto: dichiarare barButtonItem (in questo caso rightBarButtonItem) e aggiungerlo setTitleTextAttributes.
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Go!", style: .plain, target: self, action: #selector(yourFuncDestination))
dopo aver aggiunto gli attributi del titolo
navigationItem.rightBarButtonItem?.setTitleTextAttributes([.font : UIFont.systemFont(ofSize: 18, weight: .bold), .foregroundColor : UIColor.white], for: .normal)
puoi cambiare le dimensioni, il peso (.bold, .heavy, .regular ecc.) e il colore come preferisci ... Spero che questo aiuto :)
Implementazione rapida 5
rightButtonItem.setTitleTextAttributes([
NSAttributedString.Key.font: UIFont(name: "Helvetica-Bold", size: 26.0)!,
NSAttributedString.Key.foregroundColor: UIColor.green],
for: .normal)
In tutta l'app:
if let font = UIFont(name: "AvenirNext-DemiBold", size: 15) {
UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: font,NSForegroundColorAttributeName:TOOLBAR_TITLE_COLOR], forState: UIControlState.Normal)
}
Supponendo che tu voglia supportare iOS4 e precedenti, la soluzione migliore è quella di creare un pulsante a barra usando il initWithCustomView:
metodo e fornire la tua vista che potrebbe essere qualcosa come un UIButton in cui puoi facilmente personalizzare il carattere.
Puoi anche trascinare un UIButton su una barra degli strumenti o sulla barra di navigazione in Interface Builder se desideri creare il pulsante con il trascinamento della selezione anziché a livello di programmazione.
Purtroppo questo significa creare l'immagine di sfondo del pulsante da soli. Non è possibile personalizzare il carattere di un UIBarButtonItem standard prima di iOS5.
È possibile creare un personalizzato a livello di UIView
codice:
UIView *buttonItemView = [[UIView alloc] initWithFrame:buttonFrame];
Quindi aggiungi immagini, etichette o qualsiasi cosa ti piaccia alla visualizzazione personalizzata:
[buttonItemView addSubview:customImage];
[buttonItemView addSubview:customLabel];
...
Ora mettilo nel tuo UIBarButtomItem
.
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:buttonItemView];
E infine aggiungi barButtonItem alla barra di navigazione.
Per il completamento, vorrei aggiungere questo metodo, ancora utilizzato in Objective-C nel 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];