Eu tenho um UIBarButtonItem
no meu UIToolbar
título Concluído . Agora eu quero alterar a fonte do padrão para "Trebuchet MS" com negrito. Como eu posso fazer isso?
Eu tenho um UIBarButtonItem
no meu UIToolbar
título Concluído . Agora eu quero alterar a fonte do padrão para "Trebuchet MS" com negrito. Como eu posso fazer isso?
Respostas:
Como UIBarButtonItem herda de UIBarItem, você pode tentar
- (void)setTitleTextAttributes:(NSDictionary *)attributes
forState:(UIControlState)state
mas isso é apenas para iOS5. Para o iOS 3/4, você precisará usar uma exibição personalizada.
Para ser mais preciso, isso pode ser feito como abaixo
[buttonItem setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
[UIFont fontWithName:@"Helvetica-Bold" size:26.0], NSFontAttributeName,
[UIColor greenColor], NSForegroundColorAttributeName,
nil]
forState:UIControlStateNormal];
Ou com a sintaxe literal do objeto:
[buttonItem setTitleTextAttributes:@{
NSFontAttributeName: [UIFont fontWithName:@"Helvetica-Bold" size:26.0],
NSForegroundColorAttributeName: [UIColor greenColor]
} forState:UIControlStateNormal];
Por conveniência, aqui está a implementação do Swift:
buttonItem.setTitleTextAttributes([
NSAttributedStringKey.font: UIFont(name: "Helvetica-Bold", size: 26.0)!,
NSAttributedStringKey.foregroundColor: UIColor.green],
for: .normal)
Para aqueles interessados em usar o UIAppearance
estilo de suas UIBarButtonItem
fontes em todo o aplicativo, isso pode ser feito usando esta linha de código:
Objetivo 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)
Ou para um único UIBarButtonItem (não para todo o aplicativo), se você tiver uma fonte personalizada para um botão em particular:
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}"
Obviamente, você pode alterar a fonte e o tamanho para o que quiser. Eu prefiro colocar esse código no AppDelegate.m
arquivo na didFinishLaunchingWithOptions
seção
Atributos disponíveis (basta adicioná-los ao NSDictionary
):
NSFontAttributeName
: Alterar fonte com um UIFont
NSForegroundColorAttributeName
: Altere a cor com um UIColor
NSShadow
: Adicione uma sombra projetada (consulte a NSShadow
referência da classe)(Atualizado para iOS7 +)
No Swift, você faria o seguinte:
backButtonItem.setTitleTextAttributes([
NSFontAttributeName : UIFont(name: "Helvetica-Bold", size: 26)!,
NSForegroundColorAttributeName : UIColor.blackColor()],
forState: UIControlState.Normal)
Estas são ótimas respostas acima. Apenas atualizando para 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)
rápido
barbutton.setTitleTextAttributes([
NSFontAttributeName : UIFont.systemFontOfSize(18.0),
NSForegroundColorAttributeName : UIColor.redColor(),NSBackgroundColorAttributeName:UIColor.blackColor()],
forState: UIControlState.Normal)
Objetivo-C
[ barbutton setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
[UIFont fontWithName:@"Helvetica-Bold" size:20.0], NSFontAttributeName,
[UIColor redColor], NSForegroundColorAttributeName,[UIColor blackColor],NSBackgroundColorAttributeName,
nil]
forState:UIControlStateNormal];
Para fazer isso para alguns, UIBarButtonItems
mas não para todos, recomendo a seguinte abordagem.
UIBarButtonItem
subclasse. Não adicione nada a ele - você o usará apenas como uma classe personalizada no storyboard e como proxy de aparência ...UIBarButtonItems
para sua subclasseUIBarButtonItem
subclasse e adicione a seguinte linha aapplication:didFinishLaunchingWithOptions:
No meu caso, subclassifiquei UIBarButtonItem
com o único propósito de colocar o texto em negrito:
[[BoldBarButtonItem appearance] setTitleTextAttributes:
[NSDictionary dictionaryWithObjectsAndKeys:
[UIFont boldSystemFontOfSize:18.0], NSFontAttributeName,nil]
forState:UIControlStateNormal];
No Swift 4 , você pode alterar a fonte e a cor UIBarButtonItem
adicionando o código a seguir.
addTodoBarButton.setTitleTextAttributes(
[
NSAttributedStringKey.font: UIFont(name: "HelveticaNeue-Bold", size: 17)!,
NSAttributedStringKey.foregroundColor: UIColor.black
], for: .normal)
Este é o caminho certo: declare seu barButtonItem (neste caso rightBarButtonItem) e adicione-o setTitleTextAttributes.
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Go!", style: .plain, target: self, action: #selector(yourFuncDestination))
depois de adicionar atributos de título
navigationItem.rightBarButtonItem?.setTitleTextAttributes([.font : UIFont.systemFont(ofSize: 18, weight: .bold), .foregroundColor : UIColor.white], for: .normal)
você pode alterar o tamanho, o peso (. negrito,. pesado,. regular etc.) e a cor como preferir ... Espero que ajude :)
Implementação do Swift 5
rightButtonItem.setTitleTextAttributes([
NSAttributedString.Key.font: UIFont(name: "Helvetica-Bold", size: 26.0)!,
NSAttributedString.Key.foregroundColor: UIColor.green],
for: .normal)
Em todo o aplicativo:
if let font = UIFont(name: "AvenirNext-DemiBold", size: 15) {
UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: font,NSForegroundColorAttributeName:TOOLBAR_TITLE_COLOR], forState: UIControlState.Normal)
}
Supondo que você queira oferecer suporte ao iOS4 e versões anteriores, sua melhor aposta é criar um botão de barra usando o initWithCustomView:
método e fornecer sua própria visualização, que pode ser algo como um UIButton, no qual você pode personalizar facilmente a fonte.
Você também pode arrastar um UIButton para uma barra de ferramentas ou barra de navegação no Interface Builder, se desejar criar o botão com arrastar e soltar, em vez de programaticamente.
Infelizmente, isso significa criar você mesmo a imagem de fundo do botão. Não há como personalizar a fonte de um UIBarButtonItem padrão antes do iOS5.
Você pode criar um personalizado UIView
programaticamente:
UIView *buttonItemView = [[UIView alloc] initWithFrame:buttonFrame];
Em seguida, adicione imagens, etiquetas ou o que quiser à sua visualização personalizada:
[buttonItemView addSubview:customImage];
[buttonItemView addSubview:customLabel];
...
Agora coloque no seu UIBarButtomItem
.
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:buttonItemView];
E, finalmente, adicione barButtonItem à sua barra de navegação.
Para concluir, gostaria de adicionar este método, ainda usado no Objective-C em 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];