web-dev-qa-db-fra.com

UIButton titleLabel ne s'affiche pas

J'ai vu un tas de questions similaires, mais personne n'a obtenu la réponse que je cherche. Lorsque j'utilise ce code pour créer un UIButton et définir son titleLabel, l'UIButton apparaît, mais le titleLabel n'apparaîtra pas.

UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 50, 50)];
[button setBackgroundImage:[UIImage imageNamed:@"button.png"] forState:UIControlStateNormal];
button.titleLabel.text = @"Title";
button.titleLabel.font = [UIFont fontWithName:@"System-Bold" size:25.0f];
[self.view addSubview:button];

Ce code affiche le bouton, mais pas le titleView, c'est le titre. Pourquoi est-ce possible? Je développe pour iOS 6 et supérieur.

REMARQUE 1: je ne recherche pas une option comme celle-ci:

[button setTitle:@"Title" forState:UIControlStateNormal];

Parce que je dois utiliser le titleLabel pour définir ses font et fontSize.

REMARQUE 2: je ne peux pas créer un UILabel et l'ajouter en tant que sous-vue du bouton. Depuis le bouton est plus tard animé.

36
Peter

Vous devez toujours spécifier ControlState lors de la mise à jour du titre du bouton! Il existe quatre valeurs possibles pour les boutons UIB:

UIControlStateNormal
UIControlStateHighlighted
UIControlStateDisabled
UIControlStateSelected

donc par exemple:

[button setTitle:@"Title" forState:UIControlStateNormal];

puis vous pouvez définir des paramètres personnalisés pour titleLabel:

[button.titleLabel setFont:[UIFont fontWithName:@"Zapfino" size:20.0]];
[button.titleLabel setTextColor:[UIColor blueColor]];
82
mdziadkowiec
[button setTitle:@"Title" forState:UIControlStateNormal];

Est la bonne façon de définir la chaîne de titre.

titleLabel est utilisé pour définir la police et la couleur.

9
andrew lattis

Essayez d'utiliser ...

[button setNeedsLayout];
[button layoutIfNeeded];

Il forcera le bouton à mettre à jour la disposition.

3
iOSGuest

Bien que cette propriété soit en lecture seule, ses propres propriétés sont en lecture/écriture. Utilisez ces propriétés principalement pour configurer le texte du bouton. Par exemple:

UIButton *button                  = [UIButton buttonWithType: UIButtonTypeSystem];
button.titleLabel.font            = [UIFont systemFontOfSize: 12];
button.titleLabel.lineBreakMode   = NSLineBreakByTruncatingTail;

N'utilisez pas l'objet d'étiquette pour définir la couleur du texte ou la couleur de l'ombre. À la place, utilisez les méthodes setTitleColor (: for :) et setTitleShadowColor (: for :) de cette classe pour effectuer ces modifications. Pour définir le texte réel de l'étiquette, utilisez setTitle (_: for :) (button.titleLabel.text ne vous permet pas de définir le texte). La propriété titleLabel renvoie une valeur même si le bouton n'a pas encore été affiché. La valeur de la propriété est nulle pour les boutons système.

dans Swift:

button.setTitle("your text", for: .normal)
button.setTitleColor(.white, for: .normal)
0
Mahgol Fa

Si dans le storyboard avec une image de bouton personnalisée à partir d'actifs comme moi

Inspecteur des attributs d'archivage

Asset image as image

L'inspecteur des attributs d'archivage définit l'image de l'actif comme arrière-plan

Asset image as back ground image

0
vilas deshmukh