Question

Je veux faire un uibutton avec un 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 que cela devrait fonctionner, mais pas - aucune étiquette n'apparaît, point final.

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 Setttitle: 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 l'ai rencontré plusieurs fois auparavant et je l'ai toujours travaillé, mais j'aimerais vraiment le comprendre. Des idées?

Était-ce utile?

La solution

Définition du titleLabel's text des biens comme celui-ci n'ont aucun effet. Au lieu de cela, appelez -setTitle:forState: sur le bouton:

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

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

Par la documentation pour UIButton:

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

Vous pouvez personnaliser la couleur et la couleur de l'ombre de l'étiquette en fonction de l'état. Voir -setTitleColor:forState et -setTitleShadowColor:forState, respectivement. Le reste des propriétés sur titleLabel, tel que textAlignment et font, devrait fonctionner comme vous les avez maintenant et devrait s'appliquer à tous les états de contrôle.

En particulier, voir la documentation pour UIButton's titleLabel propriété: https://developer.apple.com/documentation/uikit/uibutton/1623992-Titlelabel

titleLabel lui-même est 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 rupture de ligne, etc.

Autres conseils

Voici comment j'ai travaillé en utilisant Swift 4.2.

counterButton.setTitle("Start Counter",
                      for:UIControl.State.normal)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top