Wie kann ich ein UILabel mit durchgestrichenem Text erstellen?

120

Ich möchte ein erstellen, UILabelin dem der Text so ist

Geben Sie hier die Bildbeschreibung ein

Wie kann ich das machen? Wenn der Text klein ist, sollte auch die Zeile klein sein.

Dev
quelle
1
Mögliches Duplikat: stackoverflow.com/questions/10550732/…
Mopsled
Wenn Sie nur iOS 6-Unterstützung benötigen, können Sie dies mit einem NSAttributedStringund der UILabel attributedTextEigenschaft tun .
rmaddy
ist es möglich, den Schaltflächentext zu entfernen
SCS

Antworten:

220

SWIFT 4 UPDATE CODE

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

dann:

yourLabel.attributedText = attributeString

Um einen Teil der Saite zum Schlagen zu bringen, geben Sie die Reichweite an

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

Ziel c

In iOS 6.0> UILabel unterstütztNSAttributedString

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

Schnell

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

Definition :

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

Parameters List:

name : Eine Zeichenfolge, die den Attributnamen angibt. Attributschlüssel können von einem anderen Framework bereitgestellt werden oder von Ihnen definierte benutzerdefinierte Schlüssel sein. Informationen dazu, wo Sie die vom System bereitgestellten Attributschlüssel finden, finden Sie im Übersichtsabschnitt in der NSAttributedString-Klassenreferenz.

value : Der Attributwert, der dem Namen zugeordnet ist.

aRange : Der Zeichenbereich, für den das angegebene Attribut / Wert-Paar gilt.

Dann

yourLabel.attributedText = attributeString;

Dafür lesser than iOS 6.0 versionsmusst du 3-rd party componentdas tun. Einer von ihnen ist TTTAttributedLabel , ein anderer ist OHAttributedLabel .

Paresh Navadiya
quelle
Wie kann ich für iOS 5.1.1 eine kleinere Version verwenden, um den zugewiesenen Text anzuzeigen?
Dev
Können Sie ein gutes Toutorial vorschlagen? Der Link, den Sie bereitgestellt haben, ist etwas schwer zu verstehen .. :(
Dev
Können Sie erklären, was ich tun soll, um ein von Dritten zugeschriebenes Label für ios
Dev
Was ist @ 2? Magische Zahl?
Ben Sinclair
7
Ich denke, Sie haben vergessen, das zu begehen. Sie sollten anstelle von @ 2 einen geeigneten Wert aus NSUnderlineStyle verwenden. Ich bin hier ein bisschen pedantisch.
Ben Sinclair
44

Verwenden Sie in Swift die Aufzählung für den einzelnen durchgestrichenen Linienstil:

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

Zusätzliche durchgestrichene Stile ( Denken Sie daran, mit .rawValue auf die Aufzählung zuzugreifen ):

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

Durchgestrichene Muster (mit dem Stil ODER-bearbeitet zu werden):

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

Geben Sie an, dass das Durchstreichen nur auf Wörter (nicht auf Leerzeichen) angewendet werden soll:

  • NSUnderlineStyle.ByWord
Chris Trevarthen
quelle
1
Up stimmte für die Verwendung der richtigen Konstante anstelle einer Zahl
Mihai Fratu
36

Ich bevorzuge NSAttributedStringeher als NSMutableAttributedStringfür diesen einfachen Fall:

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

Konstanten zum Angeben von NSUnderlineStyleAttributeNameund NSStrikethroughStyleAttributeNameAttributen einer zugeordneten Zeichenfolge:

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

Durchgestrichen in 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

Es hat bei mir wie ein Zauber funktioniert.

Verwenden Sie es als Erweiterung

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
    }
}

Rufen Sie so an

myLabel.attributedText = "my string".strikeThrough()

UILabel-Erweiterung zum Durchstreichen Aktivieren / Deaktivieren.

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
        }
    }
    }
}

Verwenden Sie es so:

   yourLabel.strikeThrough(btn.isSelected) // true OR false
Purnendu Roy
quelle
Kennen Sie zufällig eine Lösung dafür, dass StrikeThrough nicht entfernt wird? Ähnlich wie bei forums.developer.apple.com/thread/121366
JeroenJK
23

SWIFT-CODE

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

dann:

yourLabel.attributedText = attributeString

Danke an Prince Antwort ;)

Pekpon
quelle
15

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

Eine andere Methode ist die Verwendung der 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
    }
}

Aufruf der Funktion: Verwendet es so

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

Gutschrift an @Yahya - Aktualisierung Dezember 2017
Gutschrift an @kuzdu - Aktualisierung August 2018

Muhammad Asyraf
quelle
Funktioniert bei mir nicht Die Antwort von Purnendu Roy funktioniert für mich. Der einzige Unterschied ist, dass Sie passieren value 0und Purnendu Roy passierenvalue: NSUnderlineStyle.styleSingle.rawValue
Kuzdu
@kuzdu lustige Sache, dass meine Antwort im Dezember 2017 war, es funktioniert damals, er hat gerade meinen Code kopiert und NSUnderlineStyle.styleSingle.rawValue addiert ^ - ^ Aber kein Problem, ich werde diese Antwort aktualisieren, nur um dich glücklich zu machen
Muhammad Asyraf
9

Sie können dies unter iOS 6 mit NSMutableAttributedString tun.

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

Streichen Sie UILabel-Text in Swift iOS durch. Bitte versuchen Sie es, es funktioniert für mich

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

Sie können Ihren "StrikethroughStyle" wie styleSingle, styleThick, styleDouble ändern Geben Sie hier die Bildbeschreibung ein

Karthickkck
quelle
5

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
     }
   }

Beispiel:

someLabel.attributedText = someText.strikeThrough()
Vladimir Pchelyakov
quelle
Unterschied zwischen Wert: 1 und Wert: 2
iOS
2
Der @ iOS-Wert ist die Dicke der Linie, die durch den Text fällt. Je größer der Wert,
desto
4

Für alle, die dies in einer Tabellenansichtszelle (Swift) tun möchten, müssen Sie den .attributeText wie folgt festlegen:

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
    }

Wenn Sie den Durchgestrichenen entfernen möchten, tun Sie dies, sonst bleibt er bestehen!:

cell.textLabel?.attributedText =  nil
Mikro
quelle
2

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
Harshal Valanda
quelle
2

Ich könnte zu spät zur Party kommen.

Wie auch immer, ich bin mir dessen bewusst, NSMutableAttributedStringaber kürzlich habe ich die gleiche Funktionalität mit einem etwas anderen Ansatz erreicht.

  • Ich habe das UIView mit height = 1 hinzugefügt.
  • Die führenden und nachfolgenden Einschränkungen des UIView wurden mit den führenden und nachfolgenden Einschränkungen des Labels abgeglichen
  • Richten Sie die UIView in der Mitte des Etiketts aus

Nachdem ich alle oben genannten Schritte ausgeführt hatte, sahen mein Label, UIView und seine Einschränkungen wie im folgenden Bild aus.

Geben Sie hier die Bildbeschreibung ein

user7420795
quelle
intelligente Lösung 👍
Dania Delbani
1

Verwenden Sie den folgenden Code

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;   
Hardik Thakkar
quelle
1

Ändern Sie die Texteigenschaft in "Attributiert", wählen Sie den Text aus und klicken Sie mit der rechten Maustaste, um die Schrifteigenschaft abzurufen. Klicken Sie auf das Durchgestrichene. Bildschirmfoto

Jayakrishnan
quelle
0

Für diejenigen, die Probleme mit mehrzeiligen Textstreiks haben

    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
Spydy
quelle
0

Erstellen Sie eine String-Erweiterung und fügen Sie die folgende Methode hinzu

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


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

return attributeString 

}

Verwenden Sie dann für Ihr Etikett wie folgt

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

Dies ist diejenige, die Sie in Swift 4 verwenden können, da NSStrikethroughStyleAttributeName in NSAttributedStringKey.strikethroughStyle geändert wurde

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

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

self.lbl.attributedText = attributeString
Vikram
quelle
0

Swift 4 und 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)
     }
}

Beispiel

let example = NSAttributedString(string: "This is an example").withStrikeThrough(1)
Rashid Latif
quelle