Comment souligner un UILabel dans swift?

comment souligner un UILabel dans Swift? J'ai cherché les objectifs-C, mais je n'ai pas pu les faire travailler à Swift.

50
demandé sur Hamza Ghazouani 2015-01-20 22:10:26

11 réponses

vous pouvez le faire en utilisant NSAttributedString

exemple:

let underlineAttribute = [NSUnderlineStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue]
let underlineAttributedString = NSAttributedString(string: "StringWithUnderLine", attributes: underlineAttribute)
myLabel.attributedText = underlineAttributedString

MODIFIER

pour avoir les mêmes attributs pour tous les textes D'un UILabel, je vous suggère de sous-classe UILabel et texte dominant, comme cela:

Swift 3.0

class UnderlinedLabel: UILabel {

    override var text: String? {
        didSet {
            guard let text = text else { return }
            let textRange = NSMakeRange(0, text.characters.count)
            let attributedText = NSMutableAttributedString(string: text)
            attributedText.addAttribute(NSUnderlineStyleAttributeName , value: NSUnderlineStyle.styleSingle.rawValue, range: textRange)
            // Add other attributes if needed
            self.attributedText = attributedText
        }
    }
}

Et vous mettez votre texte comme ceci :

@IBOutlet weak var label: UnderlinedLabel!

    override func viewDidLoad() {
        super.viewDidLoad()

        label.text = "StringWithUnderLine"
    }

:

Swift (2.0 à 2.3):

class UnderlinedLabel: UILabel {

    override var text: String? {
        didSet {
            guard let text = text else { return }
            let textRange = NSMakeRange(0, text.characters.count)
            let attributedText = NSMutableAttributedString(string: text)
            attributedText.addAttribute(NSUnderlineStyleAttributeName, value:NSUnderlineStyle.StyleSingle.rawValue, range: textRange)
            // Add other attributes if needed

            self.attributedText = attributedText
        }
    }
}

Swift 1.2:

class UnderlinedLabel: UILabel {

    override var text: String! {
        didSet {
            let textRange = NSMakeRange(0, count(text))
            let attributedText = NSMutableAttributedString(string: text)
            attributedText.addAttribute(NSUnderlineStyleAttributeName, value:NSUnderlineStyle.StyleSingle.rawValue, range: textRange)
            // Add other attributes if needed

            self.attributedText = attributedText
        }
    }
}
151
répondu Hamza Ghazouani 2016-10-27 10:40:45

One liner swift 4:

label.attributedText = NSAttributedString(string: "Text", attributes:
    [.underlineStyle: NSUnderlineStyle.styleSingle.rawValue])

One liner swift 3:

label.attributedText = NSAttributedString(string: "Text", attributes:
      [NSUnderlineStyleAttributeName: NSUnderlineStyle.styleSingle.rawValue])
53
répondu hasan 2018-01-21 07:44:13

si vous cherchez un moyen de le faire sans héritage -

swift 3/4

// in swift 4 - switch NSUnderlineStyleAttributeName with NSAttributedStringKey.underlineStyle
extension UILabel {
    func underline() {
        if let textString = self.text {
          let attributedString = NSMutableAttributedString(string: textString)
          attributedString.addAttribute(NSUnderlineStyleAttributeName, value: NSUnderlineStyle.styleSingle.rawValue, range: NSRange(location: 0, length: attributedString.length - 1))
          attributedText = attributedString
        }
    }
}


extension UIButton {
  func underline() {
    let attributedString = NSMutableAttributedString(string: (self.titleLabel?.text!)!)
    attributedString.addAttribute(NSUnderlineStyleAttributeName, value: NSUnderlineStyle.styleSingle.rawValue, range: NSRange(location: 0, length: (self.titleLabel?.text!.characters.count)!))
    self.setAttributedTitle(attributedString, for: .normal)
  }
}
12
répondu Shlomo Koppel 2017-08-21 08:00:44

vous pouvez souligner le texte UILabel en utilisant Interface Builder.

voici le lien de ma réponse: ajouter l'attribut underline au texte partiel UILabel dans storyboard

7
répondu Rizwan Shaikh 2017-05-23 11:33:25

juste une petite correction pour la réponse de Shlome dans Swift 4 et Xcode 9 .

extension UILabel {
    func underline() {
        if let textString = self.text {
            let attributedString = NSMutableAttributedString(string: textString)
            attributedString.addAttribute(NSAttributedStringKey.underlineStyle,
                                          value: NSUnderlineStyle.styleSingle.rawValue,
                                          range: NSRange(location: 0, length: attributedString.length - 1))
            attributedText = attributedString
        }
    }
}

    extension UIButton {
        func underline() {
            let attributedString = NSMutableAttributedString(string: (self.titleLabel?.text!)!)
            attributedString.addAttribute(NSAttributedStringKey.underlineStyle,
                                          value: NSUnderlineStyle.styleSingle.rawValue,
                                          range: NSRange(location: 0, length: (self.titleLabel?.text!.count)!))
            self.setAttributedTitle(attributedString, for: .normal)
        }
    }
7
répondu Elano Vasconcelos 2017-11-02 16:38:34

Swift 4:

1 - créer une extension de chaîne de caractères pour obtenir le texte attribué.

2- Utiliser il

Extension:

import UIKit
extension String {
   func getUnderLineAttributedText() -> NSAttributedString {
       return NSMutableAttributedString(string: self, attributes: [.underlineStyle: NSUnderlineStyle.styleSingle.rawValue])
   }
}

comment l'utiliser sur buttton:

if let title = button.titleLabel?.text{
    button.setAttributedTitle(title.getUnderLineAttributedText(), for: .normal)
}

Comment l'utiliser sur les Étiquettes:

if let title = label.text{    
   label.attributedText = title.getUnderLineAttributedText()
}

Or Stoyboard version

6
répondu alegelos 2018-07-31 09:05:20

Swift 4 changements. N'oubliez pas d'utiliser NSUnderlineStyle.styleSingle.rawValue au lieu de NSUnderlineStyle.styleSingle .

   'let attributedString = NSAttributedString(string: "Testing")
    let textRange = NSMakeRange(0, attributedString.length)
    let underlinedMessage = NSMutableAttributedString(attributedString: attributedString)
    underlinedMessage.addAttribute(NSAttributedStringKey.underlineStyle,
                                   value:NSUnderlineStyle.styleSingle.rawValue,
                                   range: textRange)
    label.attributedText = underlinedMessage

`

2
répondu venky 2017-09-26 07:34:12

la réponse ci-dessus provoque une erreur dans mon environnement de construction.

cela ne fonctionne pas dans Swift 4.0:

attributedText.addAttribute(NSUnderlineStyleAttributeName, 
                            value: NSUnderlineStyle.styleSingle.rawValue, 
                            range: textRange)

essayez plutôt ceci:

attributedText.addAttribute(NSAttributedStringKey.underlineStyle,
                            value: NSUnderlineStyle.styleSingle.rawValue,
                            range: textRange)

j'espère que ça aidera quelqu'un.

1
répondu H. Tan 2017-10-25 15:55:25

/ / Swift 4 Version

 let attributedString  = NSMutableAttributedString(string: "Your Text Here", attributes: [NSAttributedStringKey.underlineStyle : true])

self.yourlabel.attributedText = attributedString
1
répondu iOS Developer 2018-09-14 12:15:17

Pour Swift 2.3

extension UIButton {
    func underline() {
        let attributedString = NSMutableAttributedString(string: (self.titleLabel?.text!)!)
        attributedString.addAttribute(NSUnderlineStyleAttributeName, value: NSUnderlineStyle.StyleSingle.rawValue, range: NSRange(location: 0, length: (self.titleLabel?.text!.characters.count)!))
        self.setAttributedTitle(attributedString, forState: .Normal)
    }
}

et dans ViewController

@IBOutlet var yourButton: UIButton!

dans ViewDidLoad méthode ou dans votre fonction juste écrire

yourButton.underline()

il soulignera le titre de votre bouton

0
répondu Syed Hasnain 2018-09-14 12:15:51

même réponse dans Swift 4.2

Pour UILable

extension UILabel {
    func underline() {
        if let textString = self.text {
            let attributedString = NSMutableAttributedString(string: textString)
            attributedString.addAttribute(NSAttributedString.Key.underlineStyle,
                                          value: NSUnderlineStyle.single.rawValue,
                                          range: NSRange(location: 0, length: textString.count))
            self.attributedText = attributedString
        }
    }
}

l'Appel UILabel comme ci-dessous

myLable.underline()

Pour UIButton

extension UIButton {
    func underline() {
        if let textString = self.titleLabel?.text {

            let attributedString = NSMutableAttributedString(string: textString)
            attributedString.addAttribute(NSAttributedString.Key.underlineStyle,
                                          value: NSUnderlineStyle.single.rawValue,
                                          range: NSRange(location: 0, length: textString.count))
            self.setAttributedTitle(attributedString, for: .normal)
        }

    }
}

l'Appel UIButton comme ci-dessous

myButton.underline()

j'ai regardé dans les réponses ci-dessus, et certains d'entre eux sont force de déballage texte valeur. Je suggérerai d'obtenir de la valeur en déballant en toute sécurité. Cela évitera le crash en cas de valeur nulle. Espérons que Cela aide :)

0
répondu Abdul Rehman Warraich 2018-09-22 13:27:35