Je veux créer une UILabel
dans laquelle le texte est comme ceci
Comment puis-je faire ceci? Lorsque le texte est petit, la ligne doit également être petite.
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 .
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;
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 ):
Motifs barrés (à utiliser avec le style):
Spécifiez que le texte barré ne doit être appliqué qu'à des mots (pas des espaces):
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 ;)
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()
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;
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
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
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
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()
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
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;
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!")
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
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é.
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