Je veux créer un UILabel
dans lequel le texte est comme ça
Comment puis-je faire ceci? Lorsque le texte est petit, la ligne doit également être petite.
NSAttributedString
et la UILabel attributedText
propriété.
Je veux créer un UILabel
dans lequel le texte est comme ça
Comment puis-je faire ceci? Lorsque le texte est petit, la ligne doit également être petite.
NSAttributedString
et la UILabel attributedText
propriété.
Réponses:
CODE DE MISE À JOUR SWIFT 4
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text")
attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle, value: 2, range: NSMakeRange(0, attributeString.length))
puis:
yourLabel.attributedText = attributeString
Pour faire une partie de la chaîne à frapper puis fournir 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 chargeNSAttributedString
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 : une chaîne spécifiant le nom de l'attribut. Les clés d'attribut peuvent être fournies par un autre framework ou peuvent être des clés personnalisées que vous définissez. Pour plus d'informations sur l'emplacement des clés d'attribut fournies par le système, reportez-vous à la section Présentation dans NSAttributedString Class Reference.
value : la valeur d'attribut associée au nom.
aRange : plage de caractères à laquelle s'applique la paire attribut / valeur spécifiée.
ensuite
yourLabel.attributedText = attributeString;
Car lesser than iOS 6.0 versions
vous devez 3-rd party component
le faire. L'un d'eux est TTTAttributedLabel , un autre est OHAttributedLabel .
Dans Swift, en utilisant l'énumération pour le style de ligne barrée simple:
let attrString = NSAttributedString(string: "Label Text", attributes: [NSStrikethroughStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue])
label.attributedText = attrString
Styles barrés supplémentaires ( n'oubliez pas d'accéder à l'énumération en utilisant .rawValue ):
Motifs barrés (à modifier par OU avec le style):
Spécifiez que le barré ne doit être appliqué que sur les mots (pas les espaces):
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 pour spécifier à la fois 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;
Barré dans Swift 5.0
let attributeString = NSMutableAttributedString(string: "Your Text")
attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle,
value: NSUnderlineStyle.single.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(
NSAttributedString.Key.strikethroughStyle,
value: NSUnderlineStyle.single.rawValue,
range:NSMakeRange(0,attributeString.length))
return attributeString
}
}
Appelez comme ça
myLabel.attributedText = "my string".strikeThrough()
Extension UILabel pour activer / désactiver le barré.
extension UILabel {
func strikeThrough(_ isStrikeThrough:Bool) {
if isStrikeThrough {
if let lblText = self.text {
let attributeString = NSMutableAttributedString(string: lblText)
attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle, value: NSUnderlineStyle.single.rawValue, range: NSMakeRange(0,attributeString.length))
self.attributedText = attributeString
}
} else {
if let attributedStringText = self.attributedText {
let txt = attributedStringText.string
self.attributedText = nil
self.text = txt
return
}
}
}
}
Utilisez-le comme ceci:
yourLabel.strikeThrough(btn.isSelected) // true OR false
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éponse ;)
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 d' extension de chaîne
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()
Crédit à @Yahya - mise à jour décembre 2017
Crédit à @kuzdu - mise à jour août 2018
value
0
et Purnendu Roy Passvalue: NSUnderlineStyle.styleSingle.rawValue
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;
Biffez le texte UILabel dans Swift iOS. S'il vous plaît essayez ceci, cela fonctionne 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 barré" comme styleSingle, styleThick, styleDouble
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()
Pour quiconque cherche 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 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
Je suis peut-être en retard à la fête.
Quoi qu'il en soit, je suis au courant de la NSMutableAttributedString
mais récemment j'ai obtenu la même fonctionnalité avec une approche légèrement différente.
Après avoir suivi toutes les étapes ci-dessus, mon étiquette, UIView et ses contraintes ressemblaient à l'image ci-dessous.
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;
Changez la propriété de texte en attribuée et sélectionnez le texte et cliquez avec le bouton droit pour obtenir la propriété de police. Cliquez sur le barré.
Pour ceux qui rencontrent des problèmes avec la grève de texte sur plusieurs lignes
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
Créez une extension de chaîne et ajoutez 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 ceci
yourLabel.attributedText = String.makeSlashText("Hello World!")
C'est celui que vous pouvez utiliser dans Swift 4 car NSStrikethroughStyleAttributeName a été changé en NSAttributedStringKey.strikethroughStyle
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text")
attributeString.addAttribute(NSAttributedStringKey.strikethroughStyle, value: 2, range: NSMakeRange(0, attributeString.length))
self.lbl.attributedText = attributeString
Swift 4 et 5
extension NSAttributedString {
/// Returns a new instance of NSAttributedString with same contents and attributes with strike through added.
/// - Parameter style: value for style you wish to assign to the text.
/// - Returns: a new instance of NSAttributedString with given strike through.
func withStrikeThrough(_ style: Int = 1) -> NSAttributedString {
let attributedString = NSMutableAttributedString(attributedString: self)
attributedString.addAttribute(.strikethroughStyle,
value: style,
range: NSRange(location: 0, length: string.count))
return NSAttributedString(attributedString: attributedString)
}
}
Exemple
let example = NSAttributedString(string: "This is an example").withStrikeThrough(1)