Quelqu'un peut-il suggérer comment souligner le titre d'un UIButton? J'ai un UIButton de type personnalisé et je veux que le titre soit souligné, mais le constructeur d'interface ne propose aucune option pour le faire.
Dans Interface Builder, lorsque vous sélectionnez l'option Police pour un bouton, il fournit l'option de sélectionner Aucun, Simple, Double, Couleur, mais aucun de ces éléments ne modifie le titre du bouton.
Toute aide appréciée.
Réponses:
UIUnderlinedButton.h
UIUnderlinedButton.m
la source
drawRect
n'est pas appelé lors de la rotation. Cela peut être résolu en paramétrant votre bouton pour qu'il soit redessiné comme ceci:myButton.contentMode = UIViewContentModeRedraw;
ce qui force le bouton à se redessiner lorsque les limites changent.setTitle
méthode commeobjective-c - (void)setTitle:(NSString *)title forState:(UIControlState)state { [super setTitle:title forState:state]; [self setNeedsDisplay]; }
Pour utiliser le générateur d'interface pour souligner, il faut:
Vidéo réalisée par quelqu'un d'autre https://www.youtube.com/watch?v=5-ZnV3jQd9I
la source
setTitle
avec du texte attribué. Pour moi, créer un bouton personnalisé pour dessiner un soulignement est un peu exotique (peut-être que je suis encore nouveau sur iOS, même si une application est terminée).À partir d'iOS6, il est désormais possible d'utiliser un NSAttributedString pour effectuer un soulignement (et toute autre prise en charge des chaînes attribuées) d'une manière beaucoup plus flexible:
Remarque: ajouté ceci comme une autre réponse - car c'est une solution totalement différente de la précédente.
Edit: bizarrement (sous iOS8 au moins) il faut souligner le premier caractère sinon ça ne marche pas!
pour contourner le problème, définissez le premier caractère souligné avec une couleur claire!
la source
Vous pouvez le faire dans le générateur d'interface lui-même.
la source
C'est très simple avec une chaîne attribuée
Crée un dictionnaire avec des attributs définis et s'applique à la chaîne attribuée. Ensuite, vous pouvez définir la chaîne attribuée en tant que titre attribué dans uibutton ou texte attribué dans uilabel.
la source
commentString
; avez-vous copié la réponse de @ NickH247?Voici ma fonction, fonctionne dans Swift 1.2.
MISE À JOUR de l'extension Swift 3.0:
la source
La réponse de Nick est un excellent moyen rapide de le faire.
J'ai ajouté le support
drawRect
pour les ombres.La réponse de Nick ne prend pas en compte si le titre de votre bouton a une ombre sous le texte:
Mais vous pouvez déplacer le soulignement vers le bas de la hauteur de l'ombre comme ceci:
Ensuite, vous obtiendrez quelque chose comme ceci:
la source
Pour Swift 3, l'extension suivante peut être utilisée:
la source
la source
En développant la réponse de @Nick H247, j'ai rencontré un problème où, tout d'abord, le soulignement n'était pas redessiné lorsque le bouton était redimensionné lors de la rotation; ceci peut être résolu en paramétrant votre bouton pour redessiner comme ceci:
Cela force le bouton à se redessiner lorsque les limites changent.
Deuxièmement, le code d'origine supposait que vous n'aviez qu'une ligne de texte dans le bouton (mon bouton s'habille à 2 lignes lors de la rotation) et le soulignement n'apparaît que sur la dernière ligne de texte. Le code drawRect peut être modifié pour d'abord calculer le nombre de lignes dans le bouton, puis mettre un soulignement sur chaque ligne plutôt que juste le bas, comme ceci:
J'espère que ce code aide quelqu'un d'autre!
la source
En rapide
la source
Vous pouvez utiliser ce code pour ajouter un soulignement avec un espacement dans le bouton.
1 - Référence constructeur d'interface
2 - en utilisant le code décrit
la source
La version Swift 5.0 qui fonctionne à partir de septembre 2019 dans Xcode 10.3:
Pour l'utiliser, définissez d'abord le titre de votre bouton avec
button.setTitle("Button Title", for: .normal)
, puis appelezbutton.underlineText()
pour que ce titre soit souligné.la source
Comment va-t-on gérer le cas lorsque nous maintenons un bouton souligné enfoncé? Dans ce cas, la couleur du texte du bouton change en fonction de la couleur en surbrillance mais la ligne reste de la couleur d'origine. Disons que si la couleur du texte du bouton à l'état normal est noire, son soulignement aura également une couleur noire. La couleur en surbrillance du bouton est le blanc. Si vous maintenez le bouton enfoncé, la couleur du texte du bouton passe du noir au blanc, mais la couleur de soulignement reste noire.
la source
Je crois que c'est un bug dans l'éditeur de polices dans XCode. Si vous utilisez le générateur d'interface, vous devez changer le titre de Plain à Attribué, ouvrez TextEdit, créez du texte souligné et copiez-collez dans la zone de texte dans XCode
la source
Réponse de Nick H247 mais approche Swift:
la source
la source
Version Swift 3 pour la réponse de @ NickH247 avec couleur de soulignement personnalisée, largeur de ligne et espace:
la source