Üstü çizili metin içeren bir UILabel'i nasıl oluşturabilirim?


121

UILabelMetnin böyle olduğu bir oluşturmak istiyorum

görüntü açıklamasını buraya girin

Bunu nasıl yapabilirim? Metin küçük olduğunda satır da küçük olmalıdır.



Yalnızca iOS 6 desteğine ihtiyacınız varsa, bunu bir NSAttributedStringve UILabel attributedTextözelliği ile yapabilirsiniz.
rmaddy

düğme metninin vuruşunu kaldırmak mümkün mü
SCS

Yanıtlar:


221

SWIFT 4 GÜNCELLEME KODU

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

sonra:

yourLabel.attributedText = attributeString

Dizenin bir kısmını vurmak için yapmak ve ardından aralığı sağlamak

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

Objective-C

Gelen iOS 6.0> UILabel desteklerNSAttributedString

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

hızlı

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

Tanım :

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

Parameters List:

isim : Öznitelik adını belirten bir dize. Öznitelik anahtarları başka bir çerçeve tarafından sağlanabilir veya sizin tanımladığınız özel anahtarlar olabilir. Sistem tarafından sağlanan öznitelik anahtarlarının nerede bulunacağı hakkında bilgi için, NSAttributedString Sınıf Başvurusu'ndaki genel bakış bölümüne bakın.

değer : İsimle ilişkilendirilen öznitelik değeri.

aRange : Belirtilen öznitelik / değer çiftinin geçerli olduğu karakter aralığı.

Sonra

yourLabel.attributedText = attributeString;

Bunu lesser than iOS 6.0 versionsyapman gerekiyor 3-rd party component. Bunlardan biri TTTAttributedLabel , diğeri OHAttributedLabel'dir .


İOS 5.1.1 daha düşük sürüm için, ilişkilendirilen metni görüntülemek için 3. taraf atıflı Etiketi nasıl kullanabilirim:?
Dev

İyi bir Toutorial önerebilir misin? Sağladığınız bağlantının anlaşılması biraz zor .. :(
Dev

İos için üçüncü tarafa atıfta bulunulan bir Etiket oluşturmak için ne yapmam gerektiğini açıklayabilir misiniz
Geliştirme

@ 2 nedir? Sihirli sayı?
Ben Sinclair

7
Sanırım bunu yapmayı unuttun. @ 2 yerine NSUnderlineStyle'dan uygun bir değer kullanmalısınız. Burada biraz bilgiçim.
Ben Sinclair

45

Swift'de, tek üstü çizili çizgi stili için sıralamayı kullanma:

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

Ek üstü çizili stiller ( .rawValue kullanarak enuma erişmeyi unutmayın ):

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

Üstü çizili desenler (stille OR-ed):

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

Üstü çizili ifadenin yalnızca kelimelere uygulanması gerektiğini (boşluklara değil) belirtin:

  • NSUnderlineStyle.ByWord

1
Sayı yerine doğru sabiti kullanmak için
oylama yapıldı

36

Bu basit durum NSAttributedStringyerine tercih ederim NSMutableAttributedString:

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

Her iki belirtmek için Sabitler NSUnderlineStyleAttributeNameve NSStrikethroughStyleAttributeNamebir atfedilen dize özelliklerini:

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

27

Swift 5.0'da Üstü Çizili

let attributeString =  NSMutableAttributedString(string: "Your Text")
attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle,
                                     value: NSUnderlineStyle.single.rawValue,
                                         range: NSMakeRange(0, attributeString.length))
self.yourLabel.attributedText = attributeString

Benim için bir cazibe gibi çalıştı.

Uzantı olarak kullanı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
    }
}

Böyle ara

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

Üstü çizili için UILabel uzantısı Etkinleştir / Devre Dışı Bırak.

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

Bunu şu şekilde kullanın:

   yourLabel.strikeThrough(btn.isSelected) // true OR false

Kaldırılmadan StrikeThrough için bir çözüm biliyor musunuz? Benzer forums.developer.apple.com/thread/121366
JeroenJK

23

SWİFT KODU

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

sonra:

yourLabel.attributedText = attributeString

Prens cevabına teşekkürler ;)


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

Diğer yöntem, Dize Uzantısı
Uzantısını kullanmaktır

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

İşlevi çağırmak: Öyle kullandım

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

@Yahya'ya Kredi - Aralık 2017
Kredisini @kuzdu'ya güncelleyin - Ağustos 2018'i güncelleyin


Benim için çalışmıyor. Purnendu Roy'un cevabı benim için çalışıyor. Tek fark, pas value 0geçmeniz ve Purnendu roy pasosuvalue: NSUnderlineStyle.styleSingle.rawValue
kuzdu

@kuzdu, cevabımın Aralık 2017'de geri döndüğü komik bir şey, işe yaradı, sonra kodumu kopyaladı ve NSUnderlineStyle.styleSingle.rawValue ^ - ^ Ama sorun değil, bu yanıtı sadece seni mutlu etmek için güncelleyeceğim
Muhammad Asyraf

9

NSMutableAttributedString kullanarak IOS 6'da bunu yapabilirsiniz.

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

8

Swift iOS'ta UILabel metninin üstünü çizin. Lütfen bunu dene, benim için çalışıyor

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

"StrikethroughStyle" öğenizi styleSingle, styleThick, styleDouble gibi değiştirebilirsiniz. görüntü açıklamasını buraya girin


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

Misal:

someLabel.attributedText = someText.strikeThrough()

Değer: 1 ve değer: 2 arasındaki fark
iOS

2
@iOS değeri, metnin üstünü çizen çizginin kalınlığıdır. Değer ne kadar büyükse, metni geçen çizgi o kadar kalın olur
Vladimir Pchelyakov

4

Bunu bir tablo görüntüleme hücresinde (Swift) nasıl yapacağını arayanlar için .attributeText'i şu şekilde ayarlamanız gerekir:

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
    }

Üstü çizili olanı kaldırmak istiyorsanız, bunu yapın, aksi takdirde etrafta kalacaktır !:

cell.textLabel?.attributedText =  nil

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

2

Partiye geç kalabilirim.

Her neyse, farkındayım NSMutableAttributedStringama son zamanlarda biraz farklı bir yaklaşımla aynı işlevselliğe ulaştım.

  • UIView'ı yükseklik = 1 olarak ekledim.
  • UIView'un önde gelen ve sondaki kısıtlamaları, etiketin önde gelen ve sondaki kısıtlamalarıyla eşleşti
  • UIView, Etiketin ortasına hizalandı

Yukarıdaki tüm adımları izledikten sonra Etiketim, UIView ve kısıtlamaları aşağıdaki resimdeki gibi görünüyordu.

görüntü açıklamasını buraya girin


akıllı çözüm 👍
Dania Delbani

1

Aşağıdaki kodu kullanın

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

Text özelliğini atfedilen olarak değiştirin ve metni seçin ve font özelliğini almak için sağ tıklayın. Üstü çizili tıklayın. Ekran görüntüsü


0

Çok satırlı metin grevi sorunu yaşayanlar için

    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

Dize uzantısı oluşturun ve aşağıdaki yöntemi ekleyin

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


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

return attributeString 

}

sonra bunun gibi etiketiniz için kullanın

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

0

Swift 4'te kullanabileceğiniz budur çünkü NSStrikethroughStyleAttributeName, NSAttributedStringKey.strikethroughStyle olarak değiştirilmiştir.

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

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

self.lbl.attributedText = attributeString

0

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

Misal

let example = NSAttributedString(string: "This is an example").withStrikeThrough(1)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.