web-dev-qa-db-fra.com

iOS: UIButton titleLabel - fait-il quelque chose?

Je veux créer un UIButton de type UIButtonTypeCustom (pour la forme). Je souhaite attribuer le titre à l'aide de button.titleLabel car je dois spécifier la police. Le code suivant semble fonctionner, mais ne fonctionne pas - aucune étiquette n'apparaît, point.

UIImage *editButtonImage = [UIImage imageNamed: @"editButton.png"];
float width = editButtonImage.size.width;
float height = editButtonImage.size.height;

UIButton *editButton = [UIButton buttonWithType: UIButtonTypeCustom];
editButton.frame = CGRectMake(0, 0, width, height);
[editButton setBackgroundImage: editButtonImage forState: UIControlStateNormal];
editButton.adjustsImageWhenHighlighted = YES;
editButton.titleLabel.text = @"Edit";
editButton.titleLabel.textColor = [UIColor whiteColor];
editButton.titleLabel.textAlignment = UITextAlignmentCenter;
editButton.titleLabel.font = [UIFont fontWithName: @"Helvetica" size: 14];
[self.view addSubview: editButton];

Tout le monde dit toujours d'utiliser setTitle: forState: mais cela vous donne une police que je n'aime pas. La méthode titleLabel n'est PAS obsolète - elle devrait fonctionner.

Je suis tombé dessus plusieurs fois auparavant et j'ai toujours travaillé dessus, mais j'aimerais vraiment comprendre. Des idées?

27
Amagrammer

Définir la propriété titleLabel 's text comme cela n'a aucun effet. A la place, appelez -setTitle:forState: sur le bouton:

[editButton setTitle:@"Edit" forState:UIControlStateNormal]

La raison en est que le bouton peut avoir différents titres pour différents états (par exemple, UIControlStateDisabled, UIControlStateHighlighted). La définition d’une propriété pour l’état de contrôle UIControlStateNormal s’appliquera à tous les états si vous ne spécifiez pas explicitement les autres.

Selon la documentation de UIButton:

Cette classe fournit des méthodes permettant de définir le titre, l'image et d'autres propriétés d'apparence d'un bouton. En utilisant ces accesseurs, vous pouvez spécifier une apparence différente pour chaque état de bouton.

Vous pouvez personnaliser la couleur de l'étiquette et la couleur de l'ombre en fonction de l'état. Voir -setTitleColor:forState et -setTitleShadowColor:forState, respectivement. Les autres propriétés de titleLabel, telles que textAlignment et font, devraient fonctionner telles que vous les avez définies et devraient s’appliquer à tous les états de contrôle.

Plus précisément, consultez la documentation de la propriété UIButton de titleLabel: https://developer.Apple.com/documentation/uikit/uibutton/1623992-titlelabel

titleLabel est lui-même en lecture seule, mais cela ne signifie pas que vous ne pouvez pas modifier les valeurs de ses propres propriétés, telles que la police, le mode de saut de ligne, etc.

79
123

Voici comment j'ai travaillé avec Swift 4.2.

counterButton.setTitle("Start Counter",
                      for:UIControl.State.normal)
0
raddevus