Quiero crear un UILabel
en el que el texto sea así.
¿Cómo puedo hacer esto? Cuando el texto es pequeño, la línea también debe ser pequeña.
NSAttributedString
y la UILabel attributedText
propiedad.
Quiero crear un UILabel
en el que el texto sea así.
¿Cómo puedo hacer esto? Cuando el texto es pequeño, la línea también debe ser pequeña.
NSAttributedString
y la UILabel attributedText
propiedad.
Respuestas:
CÓDIGO DE ACTUALIZACIÓN DE SWIFT 4
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text")
attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle, value: 2, range: NSMakeRange(0, attributeString.length))
luego:
yourLabel.attributedText = attributeString
Para hacer que una parte de la cuerda golpee, proporcione rango
let somePartStringRange = (yourStringHere as NSString).range(of: "Text")
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: somePartStringRange)
C objetivo
En iOS 6.0> UILabel
admiteNSAttributedString
NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc] initWithString:@"Your String here"];
[attributeString addAttribute:NSStrikethroughStyleAttributeName
value:@2
range:NSMakeRange(0, [attributeString length])];
Rápido
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your String here")
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))
Definición :
- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)aRange
Parameters List:
nombre : una cadena que especifica el nombre del atributo. Las claves de atributo pueden ser proporcionadas por otro marco o pueden ser personalizadas que usted defina. Para obtener información sobre dónde encontrar las claves de atributo proporcionadas por el sistema, consulte la sección de descripción general en Referencia de clase NSAttributedString.
valor : el valor del atributo asociado con el nombre.
aRange : el rango de caracteres al que se aplica el par atributo / valor especificado.
Luego
yourLabel.attributedText = attributeString;
Porque lesser than iOS 6.0 versions
necesitas 3-rd party component
hacer esto. Uno de ellos es TTTAttributedLabel , otro es OHAttributedLabel .
En Swift, usando la enumeración para un estilo de línea tachado simple:
let attrString = NSAttributedString(string: "Label Text", attributes: [NSStrikethroughStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue])
label.attributedText = attrString
Estilos tachados adicionales ( recuerde acceder a la enumeración usando .rawValue ):
Patrones tachados (para ser editado con OR con el estilo):
Especifique que el tachado solo debe aplicarse a las palabras (no a los espacios):
Prefiero en NSAttributedString
lugar de NSMutableAttributedString
este simple caso:
NSAttributedString * title =
[[NSAttributedString alloc] initWithString:@"$198"
attributes:@{NSStrikethroughStyleAttributeName:@(NSUnderlineStyleSingle)}];
[label setAttributedText:title];
Constantes para especificar los atributos NSUnderlineStyleAttributeName
y NSStrikethroughStyleAttributeName
de una cadena con atributos:
typedef enum : NSInteger {
NSUnderlineStyleNone = 0x00,
NSUnderlineStyleSingle = 0x01,
NSUnderlineStyleThick = 0x02,
NSUnderlineStyleDouble = 0x09,
NSUnderlinePatternSolid = 0x0000,
NSUnderlinePatternDot = 0x0100,
NSUnderlinePatternDash = 0x0200,
NSUnderlinePatternDashDot = 0x0300,
NSUnderlinePatternDashDotDot = 0x0400,
NSUnderlineByWord = 0x8000
} NSUnderlineStyle;
Tachado en 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
Me funcionó a las mil maravillas.
Úselo como extensión
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
}
}
Llamar así
myLabel.attributedText = "my string".strikeThrough()
Extensión UILabel para activar / desactivar tachado.
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
}
}
}
}
Úselo así:
yourLabel.strikeThrough(btn.isSelected) // true OR false
CÓDIGO SWIFT
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your Text")
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))
luego:
yourLabel.attributedText = attributeString
Gracias a la respuesta de Prince ;)
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
Otro método es utilizar String Extension
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
}
}
Llamar a la función: la usé así
testUILabel.attributedText = "Your Text Goes Here!".strikeThrough()
Crédito a @Yahya - actualización de diciembre de 2017
Crédito a @kuzdu - actualización de agosto de 2018
value
0
y Purnendu Roy pasavalue: NSUnderlineStyle.styleSingle.rawValue
Puede hacerlo en IOS 6 usando NSMutableAttributedString.
NSMutableAttributedString *attString=[[NSMutableAttributedString alloc]initWithString:@"$198"];
[attString addAttribute:NSStrikethroughStyleAttributeName value:[NSNumber numberWithInt:2] range:NSMakeRange(0,[attString length])];
yourLabel.attributedText = attString;
Tacha el texto de UILabel en Swift iOS. Por favor, intente esto, funciona para mí
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
Puede cambiar su "estilo tachado" como styleSingle, styleThick, styleDouble
Rápido 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
}
}
Ejemplo:
someLabel.attributedText = someText.strikeThrough()
Para cualquiera que busque cómo hacer esto en una celda de vista de tabla (Swift), debe establecer el .attributeText de esta manera:
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 desea eliminar el tachado, hágalo, de lo contrario, se quedará.
cell.textLabel?.attributedText = nil
Rápido 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
Puede que llegue tarde a la fiesta.
De todos modos, soy consciente del NSMutableAttributedString
pero recientemente logré la misma funcionalidad con un enfoque ligeramente diferente.
Después de seguir todos los pasos anteriores, mi Etiqueta, UIView y sus restricciones se veían como la imagen de abajo.
Utilice el siguiente código
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;
Cambie la propiedad de texto a atribuida y seleccione el texto y haga clic derecho para obtener la propiedad de fuente. Haga clic en el tachado.
Para aquellos que enfrentan problemas con la huelga de texto de varias líneas
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
Cree la extensión de cadena y agregue el método siguiente
static func makeSlashText(_ text:String) -> NSAttributedString {
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: text)
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))
return attributeString
}
luego úsalo para tu etiqueta como esta
yourLabel.attributedText = String.makeSlashText("Hello World!")
Este es el que puede usar en Swift 4 porque NSStrikethroughStyleAttributeName se ha cambiado a 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 y 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)
}
}
Ejemplo
let example = NSAttributedString(string: "This is an example").withStrikeThrough(1)