web-dev-qa-db-fra.com

UILabel avec le texte barré

Je veux créer une UILabel dans laquelle le texte est comme ceci

enter image description here

Comment puis-je faire ceci? Lorsque le texte est petit, la ligne doit également être petite.

93
Dev

Code rapide

let attributeString: NSMutableAttributedString =  NSMutableAttributedString(string: "Your Text")
    attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))

puis:

yourLabel.attributedText = attributeString

Pour créer une partie de la chaîne à l’alignement, fournissez une plage

let somePartStringRange = (yourStringHere as NSString).range(of: "Text")
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: somePartStringRange)

Objectif c

Dans iOS 6.0>UILabel prend en charge NSAttributedString

NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc] initWithString:@"Your String here"];
[attributeString addAttribute:NSStrikethroughStyleAttributeName
                        value:@2
                        range:NSMakeRange(0, [attributeString length])];

Rapide

let attributeString: NSMutableAttributedString =  NSMutableAttributedString(string: "Your String here")
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))

Définition

- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)aRange

Parameters List:

name: chaîne spécifiant le nom de l'attribut. Les clés d'attribut peuvent être fournies par un autre cadre ou peuvent être personnalisées. Pour plus d'informations sur l'emplacement des clés d'attribut fournies par le système, voir la section présentation générale dans Référence de la classe NSAttributedString.

valeur: valeur d'attribut associée à nom.

aRange: la plage de caractères à laquelle s'applique la paire attribut/valeur spécifiée.

Ensuite 

yourLabel.attributedText = attributeString;

Pour lesser than iOS 6.0 versions vous avez besoin de 3-rd party component pour faire ceci . L’un d’eux est TTTAttributedLabel , l’autre est OHAttributedLabel .

171
Paresh Navadiya

Je préfère NSAttributedString plutôt que NSMutableAttributedString pour ce cas simple:

NSAttributedString * title =
    [[NSAttributedString alloc] initWithString:@"$198"
                                    attributes:@{NSStrikethroughStyleAttributeName:@(NSUnderlineStyleSingle)}];
[label setAttributedText:title];

Constantes permettant de spécifier les attributs NSUnderlineStyleAttributeName et NSStrikethroughStyleAttributeName d'une chaîne attribuée:

typedef enum : NSInteger {  
  NSUnderlineStyleNone = 0x00,  
  NSUnderlineStyleSingle = 0x01,  
  NSUnderlineStyleThick = 0x02,  
  NSUnderlineStyleDouble = 0x09,  
  NSUnderlinePatternSolid = 0x0000,  
  NSUnderlinePatternDot = 0x0100,  
  NSUnderlinePatternDash = 0x0200,  
  NSUnderlinePatternDashDot = 0x0300,  
  NSUnderlinePatternDashDotDot = 0x0400,  
  NSUnderlineByWord = 0x8000  
} NSUnderlineStyle;  
34
Kjuly

Dans Swift, utilisation de l’énumération pour le style de ligne simple barré:

let attrString = NSAttributedString(string: "Label Text", attributes: [NSStrikethroughStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue])
label.attributedText = attrString

Autres styles de barré ( N'oubliez pas d'accéder à l'énum à l'aide de .rawValue ):

  • NSUnderlineStyle.StyleNone
  • NSUnderlineStyle.StyleSingle
  • NSUnderlineStyle.StyleThick
  • NSUnderlineStyle.StyleDouble

Motifs barrés (à utiliser avec le style):

  • NSUnderlineStyle.PatternDot
  • NSUnderlineStyle.PatternDash
  • NSUnderlineStyle.PatternDashDot
  • NSUnderlineStyle.PatternDashDotDot

Spécifiez que le texte barré ne doit être appliqué qu'à des mots (pas des espaces):

  • NSUnderlineStyle.ByWord
31
Chris Trevarthen

Code rapide

let attributeString: NSMutableAttributedString =  NSMutableAttributedString(string: "Your Text")
    attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))

puis:

yourLabel.attributedText = attributeString

Merci à Prince répondre ;)

22
pekpon

Barré dans Swift 4.0

let attributeString =  NSMutableAttributedString(string: "Your Text")

attributeString.addAttribute(NSAttributedStringKey.strikethroughStyle,
                                 value: NSUnderlineStyle.styleSingle.rawValue,
                                 range: NSMakeRange(0, attributeString.length))
self.yourLabel.attributedText = attributeString

Cela a fonctionné pour moi comme un charme.

Utilisez-le comme extension

extension String {
    func strikeThrough() -> NSAttributedString {
        let attributeString =  NSMutableAttributedString(string: self)
        attributeString.addAttribute(NSAttributedStringKey.strikethroughStyle, value: NSUnderlineStyle.styleSingle.rawValue, range: NSMakeRange(0,attributeString.length))
        return attributeString
    }
}

Appelle comme ça

myLabel.attributedText = "my string".strikeThrough()
15
Purnendu roy

Vous pouvez le faire dans IOS 6 à l'aide de NSMutableAttributedString.

NSMutableAttributedString *attString=[[NSMutableAttributedString alloc]initWithString:@"$198"];
[attString addAttribute:NSStrikethroughStyleAttributeName value:[NSNumber numberWithInt:2] range:NSMakeRange(0,[attString length])];
yourLabel.attributedText = attString;
8
Bhushan

Swift 4  

    let attributeString: NSMutableAttributedString =  NSMutableAttributedString(string: "Your Text Goes Here")
    attributeString.addAttribute(NSAttributedStringKey.strikethroughStyle, value: NSUnderlineStyle.styleSingle.rawValue, range: NSMakeRange(0, attributeString.length))
    self.lbl_productPrice.attributedText = attributeString

Une autre méthode consiste à utiliser l'extension de chaîne
Extension

extension String{
    func strikeThrough()->NSAttributedString{
        let attributeString: NSMutableAttributedString =  NSMutableAttributedString(string: self)
        attributeString.addAttribute(NSAttributedStringKey.strikethroughStyle, value: NSUnderlineStyle.styleSingle.rawValue, range: NSMakeRange(0, attributeString.length))
        return attributeString
    }
}

Appel de la fonction: Utilisé comme tel

testUILabel.attributedText = "Your Text Goes Here!".strikeThrough()

Merci à @Yahya - mise à jour déc. 2017
Merci à @kuzdu - mise à jour août 2018

8
Muhammad Asyraf

Supprimez le texte UILabel dans Swift iOS. S'il te plait essaie ça ça marche pour moi

let attributedString = NSMutableAttributedString(string:"12345")
                      attributedString.addAttribute(NSAttributedStringKey.baselineOffset, value: 0, range: NSMakeRange(0, attributedString.length))
                      attributedString.addAttribute(NSAttributedStringKey.strikethroughStyle, value: NSNumber(value: NSUnderlineStyle.styleThick.rawValue), range: NSMakeRange(0, attributedString.length))
                      attributedString.addAttribute(NSAttributedStringKey.strikethroughColor, value: UIColor.gray, range: NSMakeRange(0, attributedString.length))

 yourLabel.attributedText = attributedString

Vous pouvez changer votre style "strikethroughStyle" comme styleSingle, styleThick, styleDouble enter image description here

5
Karthickkck

Pour ceux qui cherchent comment faire cela dans une cellule tableview (Swift), vous devez définir le .attributeText comme ceci:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("TheCell")!

    let attributeString: NSMutableAttributedString =  NSMutableAttributedString(string: message)
    attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))

    cell.textLabel?.attributedText =  attributeString

    return cell
    }

Si vous souhaitez supprimer le barré, faites-le, sinon il restera!

cell.textLabel?.attributedText =  nil
2
Micro

Swift 5

extension String {

  /// Apply strike font on text
  func strikeThrough() -> NSAttributedString {
    let attributeString = NSMutableAttributedString(string: self)
    attributeString.addAttribute(
      NSAttributedString.Key.strikethroughStyle,
      value: 1,
      range: NSRange(location: 0, length: attributeString.length))

      return attributeString
     }
   }

Exemple:

someLabel.attributedText = someText.strikeThrough()
2
Vladimir Pchelyakov

Swift 4.2

let attributeString: NSMutableAttributedString =  NSMutableAttributedString(string: product.price)

attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle, value: NSUnderlineStyle.single.rawValue, range: NSMakeRange(0, attributeString.length))

lblPrice.attributedText = attributeString
1
Harshal Valanda

Utilisez le code ci-dessous

NSString* strPrice = @"£399.95";

NSMutableAttributedString *titleString = [[NSMutableAttributedString alloc] initWithString:strPrice];

[finalString addAttribute: NSStrikethroughStyleAttributeName value:[NSNumber numberWithInteger: NSUnderlineStyleSingle] range: NSMakeRange(0, [titleString length])];
self.lblOldPrice.attributedText = finalString;   
1
Hardik Thakkar

Créer une extension de chaîne et ajouter la méthode ci-dessous

static func makeSlashText(_ text:String) -> NSAttributedString {


 let attributeString: NSMutableAttributedString =  NSMutableAttributedString(string: text)
        attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))

return attributeString 

}

puis utilisez pour votre étiquette comme ça 

yourLabel.attributedText = String.makeSlashText("Hello World!")
0
Josh Gray

C’est celui que vous pouvez utiliser dans Swift 4 car NSStrikethroughStyleAttributeName a été remplacé par NSAttributedStringKey.strikethroughStyle.

let attributeString: NSMutableAttributedString =  NSMutableAttributedString(string: "Your Text")

attributeString.addAttribute(NSAttributedStringKey.strikethroughStyle, value: 2, range: NSMakeRange(0, attributeString.length))

self.lbl.attributedText = attributeString
0
vikram

Modifiez la propriété text en attribut, sélectionnez le texte et cliquez avec le bouton droit de la souris pour obtenir la propriété de police. Cliquez sur le barré. Screenshot

0
Jayakrishnan

Pour ceux qui font face à un problème avec la grève de texte multiligne

    let attributedString = NSMutableAttributedString(string: item.name!)
    //necessary if UILabel text is multilines
    attributedString.addAttribute(NSBaselineOffsetAttributeName, value: 0, range: NSMakeRange(0, attributedString.length))
     attributedString.addAttribute(NSStrikethroughStyleAttributeName, value: NSNumber(value: NSUnderlineStyle.styleSingle.rawValue), range: NSMakeRange(0, attributedString.length))
    attributedString.addAttribute(NSStrikethroughColorAttributeName, value: UIColor.darkGray, range: NSMakeRange(0, attributedString.length))

    cell.lblName.attributedText = attributedString
0
Spydy