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?
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.
Voici comment j'ai travaillé avec Swift 4.2.
counterButton.setTitle("Start Counter",
for:UIControl.State.normal)