J'ai changé les titres de UIButton
s avant d'utiliser:
- (void)setTitle:(NSString *)title forState:(UIControlState)state
Mais j'ai rencontré une situation où le UIButton
que j'utilise a un titre sur plusieurs lignes et ne centrera le texte correctement que s'il est changé de "ordinaire" à "attribué" dans IB. Lorsque le titre est modifié de cette manière, la méthode habituelle setTitle: forState:
Ne met plus à jour le bouton.
Comment apporter des modifications à un titre attribué d'un UIButton
?
Pour clarifier, donc vous ne supposez pas que je fais juste une erreur stupide, j'ai utilisé le débogueur pour jeter un œil aux propriétés de UIButton
et enregistrer la sortie de
- (NSString *)titleForState:(UIControlState)state
après avoir utilisé
- (void)setTitle:(NSString *)title forState:(UIControlState)state
pour le définir, il renvoie la valeur qui vient d'être définie. Le problème est qu'il ne change pas l'apparence du bouton tant que le titre est défini sur attribué dans IB. Mon code fonctionne bien en changeant simplement ceci en simple . Mais ce n'est pas une solution comme décrit dans le lien ci-dessus.
Les titres attribués sont obtenus via
- (NSAttributedString *)attributedTitleForState:(UIControlState)state
et réglez via
- (void)setAttributedTitle:(NSAttributedString *)title forState:(UIControlState)state
Le formatage de l'objet NSAttributedString
est un peu compliqué, mais le définir sur nil
effacera le titre et c'est ce dont j'avais besoin.
Avez-vous le bouton spécifié comme IBOutlet dans votre classe de contrôleur de vue, et est-il correctement connecté en tant que sortie dans Interface Builder (faites glisser le curseur de la nouvelle prise de référence vers le propriétaire du fichier et sélectionnez votre objet UIButton)? C'est généralement le problème que j'ai quand je vois ces symptômes. Spécifiez d'abord - @property(non atomic,strong)IBOutlet UIButton *mybutton;
ensuite
[myButton setTitle: @"myTitle" forState: UIControlStateNormal];
en voici un
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self
action:@selector(aMethod:)
forControlEvents:UIControlEventTouchDown];
[button setTitle:@"Title" forState:UIControlStateNormal];
button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0);
[view addSubview:button];
pas besoin de faire des changements dans- (void)setTitle:(NSString *)title
Swift - Pour une police barrée rouge dans un titre de bouton:
let attributedStringForInvalid = NSAttributedString(string: "I'm Invalid!", attributes: [
NSStrikethroughStyleAttributeName: true,
NSForegroundColorAttributeName: UIColor.redColor()
])
myButton.setAttributedTitle(attributedStringForInvalid, forState: UIControlState.Normal)
J'ai dû utiliser les 4 lignes suivantes pour afficher la police attribuée. Dans IB, le titre est défini sur simple et non attribué.
// Get the library font
UIFont *termsFont = [MTHGAppearanceController defaultFontOfSize:[MTHGAppearanceController defaultButtonFontSizeForDevice]];
// Set the font attributes required, using our librarby function for setting the colour
NSDictionary *fontAttributes = @{NSUnderlineStyleAttributeName: @(NSUnderlineStyleSingle),NSBackgroundColorAttributeName: [UIColor clearColor], NSFontAttributeName: termsFont, NSForegroundColorAttributeName:[UIColor mthg_color255WithRed:128.0f green:128.0f blue:128.0f alpha:1.0f]};
// Configure the text we want displayed using the font set above
NSAttributedString *termsString = [[NSAttributedString alloc]initWithString:@"Terms" attributes:fontAttributes];
// Now finally display the text in the required font
[self.termsButtonOutlet setAttributedTitle:termsString forState:UIControlStateNormal];