স্ট্রাইকথ্রু পাঠ্য সহ আমি কীভাবে একটি ইউআইএলবেল তৈরি করতে পারি?


120

আমি এমন একটি তৈরি করতে চাই যাতে UILabelপাঠ্যটি এর মতো

এখানে চিত্র বর্ণনা লিখুন

কিভাবে আমি এটি করতে পারব? পাঠ্য ছোট হলে লাইনটিও ছোট হওয়া উচিত।


1
সম্ভাব্য অনুরূপ: stackoverflow.com/questions/10550732/...
mopsled

আপনার যদি কেবল আইওএস 6 সমর্থন প্রয়োজন তবে আপনি এটি NSAttributedStringএবং UILabel attributedTextসম্পত্তি দিয়ে এটি করতে পারেন ।
rmaddy

বোতামের পাঠ্যটি আনস্ট্রিক করা কি সম্ভব
এসসিএস

উত্তর:


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:

নাম : বৈশিষ্ট্যটির নাম উল্লেখ করে একটি স্ট্রিং। বৈশিষ্ট্য কীগুলি অন্য কাঠামোর দ্বারা সরবরাহ করা যেতে পারে বা আপনার সংজ্ঞায়িত কাস্টমগুলি হতে পারে। সিস্টেম-সরবরাহিত অ্যাট্রিবিউট কীগুলি কোথায় পাওয়া যায় সে সম্পর্কে তথ্যের জন্য, এনএসএট্রিবিউটেড স্ট্রিং ক্লাস রেফারেন্সের ওভারভিউ বিভাগটি দেখুন।

মান : নামের সাথে সম্পর্কিত গুণাবলী।

aRange : নির্দিষ্ট বৈশিষ্ট্য / মান জোড় প্রয়োগ করে এমন অক্ষরের ব্যাপ্তি।

তারপর

yourLabel.attributedText = attributeString;

জন্য lesser than iOS 6.0 versionsআপনার যা দরকার 3-rd party componentএই কাজ করতে। এর মধ্যে একটি টিটিটিএটিগ্রিবিউটেড লেবেল , অন্যজন ওহ্যাট্রিবিউটেড লেবেল


আইওএস 5.1.1 এর চেয়ে কম সংস্করণে আমি কীভাবে 3 টি পক্ষ দ্বারা চিহ্নিত লেবেলকে বিশিষ্ট পাঠ্য প্রদর্শন করতে পারি:?
দেব

আপনি একটি ভাল টোটোরিয়াল প্রস্তাব করতে পারেন? আপনি যে লিঙ্কটি সরবরাহ করেছেন তা বোঝা সামান্য কঠিন .. :(
দেব

আইওএসের জন্য তৃতীয় পক্ষের জন্য বিশিষ্ট লেবেল তৈরি করার জন্য আমার কী করা উচিত তা ব্যাখ্যা করতে পারেন
দেব

@ 2 কি? যাদু নম্বর?
বেন সিনক্লেয়ার

7
আমার ধারণা আপনি এটি করতে ভুলে গেছেন আপনার @ 2 এর পরিবর্তে এনএসউন্ডারলাইন স্টাইল থেকে উপযুক্ত মান ব্যবহার করা উচিত। আমি এখানে কিছুটা প্যাডেন্টিক।
বেন সিনক্লেয়ার

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- এড হতে):

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

উল্লেখ করুন যে স্ট্রাইকথ্রুটি কেবলমাত্র শব্দগুলিতে প্রয়োগ করা উচিত (স্থানগুলি নয়):

  • NSUnderlineStyle.ByWord

1
আপ একটি সংখ্যার পরিবর্তে ডান ধ্রুবক ব্যবহারের পক্ষে ভোট দিয়েছেন
মিহাই ফ্রাতু

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

আপনি কি স্ট্রাইকথ্রুটি সরানো হচ্ছে না এমন কোনও সমাধান জানেন? অনুরূপ forums.developer.apple.com/thread/121366
JeroenJK

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()

@ ইয়াহিয়ায় ক্রেডিট - ডিসেম্বর 2017 আপডেট
ক্রেডিটকে @ কুজডু - আপডেট আগস্ট 2018


আমার জন্য কাজ করে না। পূর্ণেন্দু রয়ের উত্তর আমার পক্ষে কাজ করে। পার্থক্য কেবলমাত্র আপনি value 0এবং value: NSUnderlineStyle.styleSingle.rawValue
পাসেন্দু রো

@ কুজডু মজার বিষয় যে আমার উত্তরটি ডিসেম্বর 2017 এ ফিরে এসেছিল এটি আবার কাজ করে তখন তিনি আমার কোডটি অনুলিপি করেছিলেন এবং এনএসউন্ডারলাইনস্টাইল.স্টাইলসিংল.আরওয়ালভ্যালু যোগ করেছেন ^ - তবে কোনও সমস্যা নেই আমি আপনাকে উত্তর দেওয়ার জন্য এই উত্তরটি আপডেট করব
মুহাম্মদ আশাইরাফ

9

আপনি এটি এনএসমেটেবলআট্রিবিউটেড স্ট্রিং ব্যবহার করে আইওএস 6 এ করতে পারেন।

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

8

সুইফট আইওএস-এ ইউআইএলবেল পাঠ্যকে আঘাত করান। দয়া করে এটি চেষ্টা করুন এটি আমার জন্য কাজ করছে

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
@iOS মান হ'ল পাঠ্যের স্ট্রাইথথ্রু লাইনের বেধ। মানটি যত বড়, পাঠ্যটি অতিক্রম করার জন্য আরও ঘন রেখা
ভ্লাদিমির পাচেলিয়াভভ

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কিন্তু সম্প্রতি আমি কিছুটা ভিন্ন পদ্ধতির সাথে একই কার্যকারিতা অর্জন করেছি।

  • আমি উচ্চতা = 1 সহ ইউআইভিউ যুক্ত করেছি।
  • লেবেলের শীর্ষস্থানীয় এবং পিছনের সীমাবদ্ধতার সাথে ইউআইভিউর শীর্ষস্থানীয় এবং অনুসরণীয় সীমাবদ্ধতার সাথে মিলছে
  • লেবেলের কেন্দ্রে ইউআইভিউ-র সারিবদ্ধ করুন

উপরের সমস্ত পদক্ষেপ অনুসরণ করার পরে আমার লেবেল, ইউআইভিউ এবং এর সীমাবদ্ধতা নীচের চিত্রটির মতো দেখাচ্ছে।

এখানে চিত্র বর্ণনা লিখুন


স্মার্ট সমাধান 👍
ডানিয়া দেলবানী

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-এ ব্যবহার করতে পারেন কারণ এনএসএসট্রিকিথ্রোস্টাইলঅ্যাট্রিবিউটনামটি এনএসআরট্রিবিউটস্ট্রিংকি.স্ট্রিকেথ্রো স্টাইলে পরিবর্তন করা হয়েছে

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)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.