मैं स्ट्राइकथ्रू पाठ के साथ एक यूआईलैब कैसे बना सकता हूं?


121

मैं बनाना चाहता हूं UILabelजिसमें पाठ इस तरह है

यहां छवि विवरण दर्ज करें

मैं यह कैसे कर सकता हूँ? जब पाठ छोटा होता है, तो पंक्ति भी छोटी होनी चाहिए।


1
संभावित डुप्लिकेट: stackoverflow.com/questions/10550732/…
mopsled

अगर आपको केवल iOS 6 सपोर्ट की जरूरत है तो आप यह एक NSAttributedStringऔर UILabel attributedTextप्रॉपर्टी के साथ कर सकते हैं।
rmaddy

क्या यह संभव है कि बटन पाठ
SCS

जवाबों:


221

स्विफ्ट 4 अद्यतन कोड

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

फिर:

yourLabel.attributedText = attributeString

हड़ताल करने के लिए स्ट्रिंग का कुछ हिस्सा बनाने के लिए फिर रेंज प्रदान करें

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

उद्देश्य सी

में आईओएस 6.0> UILabel का समर्थन करता हैNSAttributedString

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

तीव्र

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

परिभाषा :

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

Parameters List:

नाम : विशेषता नाम निर्दिष्ट करने वाला एक स्ट्रिंग। विशेषता कुंजी को किसी अन्य ढांचे द्वारा आपूर्ति की जा सकती है या आपके द्वारा परिभाषित कस्टम हो सकते हैं। सिस्टम-प्रदत्त विशेषता कुंजियों को खोजने के बारे में जानकारी के लिए, NSAttributedString वर्ग संदर्भ में अवलोकन अनुभाग देखें।

मूल्य : नाम के साथ जुड़ा विशेषता मान।

आरेंज : वर्णों की वह सीमा जिसके लिए निर्दिष्ट विशेषता / मान युग्म लागू होता है।

फिर

yourLabel.attributedText = attributeString;

इसके लिए lesser than iOS 6.0 versionsआपको यह 3-rd party componentकरने की आवश्यकता है। उनमें से एक TTTAttributedLabel है , दूसरा OHAttributedLabel है


IOS 5.1.1 कम संस्करण के लिए मैं कैसे जिम्मेदार पाठ प्रदर्शित करने के लिए 3 पार्टी जिम्मेदार लेबल का उपयोग कर सकता हूं:?
देव

क्या आप एक अच्छे टाउटरियल का सुझाव दे सकते हैं? आपके द्वारा प्रदान किया गया लिंक समझना थोड़ा मुश्किल है: ..(
देव

क्या आप समझा सकते हैं कि ios
Dev

@ 2 क्या है? जादुई संख्या?
बेन सिंक्लेयर

7
मुझे लगता है कि आप यह करना भूल गए। आपको @ 2 के बजाय NSUnderlineStyle से उचित मान का उपयोग करना चाहिए। मैं यहां थोड़ा पांडित्य हूं।
बेन सिनक्लेयर

45

स्विफ्ट में, सिंगल स्ट्राइकथ्रू लाइन शैली के लिए एनम का उपयोग करते हुए:

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

अतिरिक्त स्ट्राइकथ्रू शैली ( .rawValue का उपयोग करके एनम तक पहुँचने के लिए याद रखें ):

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

स्ट्राइकथ्रू पैटर्न (स्टाइल के साथ OR-ed होना):

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

निर्दिष्ट करें कि स्ट्राइकथ्रू को केवल शब्दों में लागू किया जाना चाहिए (रिक्त स्थान नहीं):

  • NSUnderlineStyle.ByWord

1
अप ने एक नंबर के बजाय सही निरंतर का उपयोग करने के लिए मतदान किया
Mihai Fratu

36

मैं इस सरल मामले के NSAttributedStringबजाय पसंद करता हूं NSMutableAttributedString:

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

एक जिम्मेदार स्ट्रिंग के गुणों NSUnderlineStyleAttributeNameऔर NSStrikethroughStyleAttributeNameविशेषताओं दोनों को निर्दिष्ट करने के लिए निरंतर :

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

स्विफ्ट 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

इसने मेरे लिए एक आकर्षण की तरह काम किया।

इसे विस्तार के रूप में उपयोग करें

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

इस तरह बुलाओ

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

स्ट्राइकथ्रू सक्षम / अक्षम करने के लिए यूआईबेल एक्सटेंशन।

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

इसे इस तरह उपयोग करें:

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

क्या आपको पता है कि स्ट्राइक ट्राउट को हटाने का कोई उपाय नहीं है? मंचों के
thread/

23

स्विफ्ट कोड

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

फिर:

yourLabel.attributedText = attributeString

राजकुमार जवाब के लिए धन्यवाद ;)


15

स्विफ्ट 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

अन्य विधि स्ट्रिंग एक्सटेंशन
एक्सटेंशन का उपयोग करना है

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

फ़ंक्शन को कॉल करना: इसका उपयोग करना पसंद है

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

@Yahya को क्रेडिट - 2017 दिसंबर को अपडेट
करें @kuzdu को क्रेडिट - अगस्त 2018 को अपडेट करें


मेरे लिए काम नहीं करता है। पूर्णेंदु रॉय का जवाब मेरे लिए काम करता है। फर्क सिर्फ इतना है कि आप में से गुजरती है value 0और पूर्णेंदु रॉय पासvalue: NSUnderlineStyle.styleSingle.rawValue
kuzdu

@kuzdu मजेदार बात यह है कि 2017 में मेरा जवाब वापस आ गया था, यह वापस काम करता है तो उसने बस मेरे कोड की प्रतिलिपि बनाई और NSUnderlineStyle.styleSingle.rawValue ^ को जोड़ा - ^ लेकिन कोई बात नहीं मैं इस उत्तर को अपडेट करूंगा बस आपको खुश करने के लिए
मुहम्मद असरफ

9

आप इसे NSMutableAttributedString का उपयोग करके IOS 6 में कर सकते हैं।

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

8

स्विफ्ट iOS में UILabel टेक्स्ट को स्ट्राइक करें। कृपया कोशिश करें कि यह मेरे लिए काम कर रहा है

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

आप अपने "स्ट्राइकथ्रू स्टाइल" को स्टाइलसिंगल, स्टाइलटीक, स्टाइलडबल जैसे बदल सकते हैं यहां छवि विवरण दर्ज करें


5

स्विफ्ट 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
     }
   }

उदाहरण:

someLabel.attributedText = someText.strikeThrough()

मूल्य के बीच का अंतर: 1 और मूल्य: 2
iOS

2
@ आईओएस मान उस रेखा की मोटाई है जो पाठ को स्ट्राइकथ्रू करती है। मूल्य जितना बड़ा होता है, पाठ को पार करने वाली रेखा
उतनी ही मोटी होती है

4

टेबलव्यू सेल (स्विफ्ट) में ऐसा करने के तरीके के बारे में किसी को भी देखने के लिए आपको इस तरह से।

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
    }

यदि आप स्ट्राइकथ्रू को हटाना चाहते हैं, तो यह चारों ओर चिपक जाएगा!

cell.textLabel?.attributedText =  nil

2

स्विफ्ट 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

मुझे पार्टी में आने में देर हो सकती है।

वैसे भी, मैं इस बारे में अवगत हूं NSMutableAttributedStringलेकिन हाल ही में मैंने थोड़ा अलग दृष्टिकोण के साथ समान कार्यक्षमता हासिल की।

  • मैंने UIView को ऊँचाई = 1 के साथ जोड़ा।
  • लेबल के अग्रणी और अनुगामी बाधाओं के साथ UIView के अग्रणी और अनुगामी अवरोधों का मिलान किया
  • लेबल के केंद्र में UIView को संरेखित किया

उपरोक्त सभी चरणों का अनुसरण करने के बाद, मेरा लेबल, UIView और इसके अवरोध छवि के नीचे की तरह दिख रहे थे।

यहां छवि विवरण दर्ज करें


स्मार्ट सॉल्यूशन
Del

1

नीचे दिए गए कोड का उपयोग करें

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

टेक्स्ट प्रॉपर्टी को एट्रिब्यूट में बदलें और टेक्स्ट सिलेक्ट करें और फॉन्ट प्रॉपर्टी पाने के लिए राइट क्लिक करें। स्ट्राइकथ्रू पर क्लिक करें। स्क्रीनशॉट


0

मल्टी लाइन टेक्स्ट स्ट्राइक के साथ समस्या का सामना करने वालों के लिए

    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

स्ट्रिंग एक्सटेंशन बनाएं और नीचे विधि जोड़ें

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


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

return attributeString 

}

तो इस तरह से अपने लेबल के लिए उपयोग करें

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

0

यह वह है जिसे आप स्विफ्ट 4 में उपयोग कर सकते हैं क्योंकि NSStrikethroughStyleAttributeName को NSAttributedStringKey.strikethroughStyle में बदल दिया गया है

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

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

self.lbl.attributedText = attributeString

0

स्विफ्ट 4 और 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)
     }
}

उदाहरण

let example = NSAttributedString(string: "This is an example").withStrikeThrough(1)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.