সুইফটে গুণিত স্ট্রিং ব্যবহার করে পাঠ্যকে বোল্ড করা


105

আমার এই মত একটি স্ট্রিং আছে

var str = "@text1 this is good @text1"

এখন text1অন্য স্ট্রিং সঙ্গে প্রতিস্থাপন , বলুন t 1। আমি পাঠ্যটি প্রতিস্থাপন করতে সক্ষম, তবে আমি এটি সাহসী করতে পারছি না। আমি নতুন স্ট্রিংকে বোল্ড করতে চাই t 1, যাতে চূড়ান্ত আউটপুটটি হয়:

@t 1 এটি ভাল @t 1

আমি এটা কিভাবে করবো?

আমি যে উদাহরণগুলি দেখছি সেগুলি অবজেক্টিভ-সিতে রয়েছে তবে আমি এটি সুইফটে করতে চাই।

আগাম ধন্যবাদ.


4
আপনার ইস্যুটি পচন করতে হবে: "সাহসী" কীভাবে তা শিখুন : স্ট্যাকওভারফ্লো / প্রশ্ন / 25199580/… পাঠ্যটি কীভাবে প্রতিস্থাপন করবেন তা শিখুন।
লারমে

4
এই লাইব্রেরিটি ব্যবহার করুন, এটি খুবই সাধারণ। github.com/iOSTechHub/AtributesString
আশীষ চৌহান

উত্তর:


243

ব্যবহার:

let label = UILabel()
label.attributedText =
    NSMutableAttributedString()
        .bold("Address: ")
        .normal(" Kathmandu, Nepal\n\n")
        .orangeHighlight(" Email: ")
        .blackHighlight(" prajeet.shrestha@gmail.com ")
        .bold("\n\nCopyright: ")
        .underlined(" All rights reserved. 2020.")

ফলাফল:

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

একটি একক লেবেল এবং আরও কিছু বোনাস পদ্ধতিতে গা bold় এবং সাধারণ পাঠ্যের সংমিশ্রণটি এখানে একটি সুস্পষ্ট উপায় way

এক্সটেনশন: সুইফট ৫ *

extension NSMutableAttributedString {
    var fontSize:CGFloat { return 14 }
    var boldFont:UIFont { return UIFont(name: "AvenirNext-Bold", size: fontSize) ?? UIFont.boldSystemFont(ofSize: fontSize) }
    var normalFont:UIFont { return UIFont(name: "AvenirNext-Regular", size: fontSize) ?? UIFont.systemFont(ofSize: fontSize)}

    func bold(_ value:String) -> NSMutableAttributedString {

        let attributes:[NSAttributedString.Key : Any] = [
            .font : boldFont
        ]

        self.append(NSAttributedString(string: value, attributes:attributes))
        return self
    }

    func normal(_ value:String) -> NSMutableAttributedString {

        let attributes:[NSAttributedString.Key : Any] = [
            .font : normalFont,
        ]

        self.append(NSAttributedString(string: value, attributes:attributes))
        return self
    }
    /* Other styling methods */
    func orangeHighlight(_ value:String) -> NSMutableAttributedString {

        let attributes:[NSAttributedString.Key : Any] = [
            .font :  normalFont,
            .foregroundColor : UIColor.white,
            .backgroundColor : UIColor.orange
        ]

        self.append(NSAttributedString(string: value, attributes:attributes))
        return self
    }

    func blackHighlight(_ value:String) -> NSMutableAttributedString {

        let attributes:[NSAttributedString.Key : Any] = [
            .font :  normalFont,
            .foregroundColor : UIColor.white,
            .backgroundColor : UIColor.black

        ]

        self.append(NSAttributedString(string: value, attributes:attributes))
        return self
    }

    func underlined(_ value:String) -> NSMutableAttributedString {

        let attributes:[NSAttributedString.Key : Any] = [
            .font :  normalFont,
            .underlineStyle : NSUnderlineStyle.single.rawValue

        ]

        self.append(NSAttributedString(string: value, attributes:attributes))
        return self
    }
}

এটা দ্রুত 2 জন্য নয়?
রেমি ছেলেরা

4
একটি ছোট উপরন্তু: func bold(_ text:String, _ size:CGFloat)। আমি সাহসের সাথে আকার যুক্ত করেছি যাতে আমি এটি বাইরে থেকে নিয়ন্ত্রণ করতে পারি। এছাড়াও, আমি এই ফাংশনটিতে AvenirNext-Mediumফন্টটি মিস করেছি তাই আমার ফন্টটি কেন দেখতে পাচ্ছি না তা বুঝতে আমাকে কয়েক মিনিট সময় নিয়েছিল। মাথা উঁচু করে।
গাল

তুমি আমার দিন বাঁচিয়েছ, বন্ধু!
oskarko

ধন্যবাদ! মোহন মতো কাজ করেছেন :)
শারদ চৌহান

4
বলি বলয়ে সরকার: ডি
মহসিন খুবাইব আহমেদ

103
var normalText = "Hi am normal"

var boldText  = "And I am BOLD!"

var attributedString = NSMutableAttributedString(string:normalText)

var attrs = [NSFontAttributeName : UIFont.boldSystemFont(ofSize: 15)]
var boldString = NSMutableAttributedString(string: boldText, attributes:attrs)

attributedString.append(boldString)

আপনি যখন এটি কোনও লেবেলে বরাদ্দ করতে চান:

yourLabel.attributedText = attributedString

দুর্দান্ত উত্তর! ধন্যবাদ!
হ্যাকার_1989

দ্রষ্টব্য: অ্যাপেন্ডএট্রিবিউটেড স্ট্রিংয়ের নাম পরিবর্তন করা হয়েছে। অ্যাপেন্ড ()
Andrea Leganza

28

সম্পাদনা / আপডেট: এক্সকোড 8.3.2 • সুইফট 3.1

আপনি যদি এইচটিএমএল এবং সিএসএস জানেন তবে আপনি সহজেই ফন্টের শৈলী, রঙ এবং আপনার বৈশিষ্ট্যযুক্ত স্ট্রিংয়ের আকারটি নিম্নরূপে নিয়ন্ত্রণ করতে ব্যবহার করতে পারেন:

extension String {
    var html2AttStr: NSAttributedString? {
        return try? NSAttributedString(data: Data(utf8), options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue], documentAttributes: nil)
    }
}

"<style type=\"text/css\">#red{color:#F00}#green{color:#0F0}#blue{color: #00F; font-weight: Bold; font-size: 32}</style><span id=\"red\" >Red,</span><span id=\"green\" > Green </span><span id=\"blue\">and Blue</span>".html2AttStr

আমি এটি সুইফট 2 এক্সকোডে প্রয়োগ করার চেষ্টা করছি, তবে ফন্টটি প্রয়োগ হচ্ছে না। স্ট্রিংটি এখানে:<link href=\"https://fonts.googleapis.com/css?family=Frank+Ruhl+Libre\" rel=\"stylesheet\"> <span style=\"font-family: 'Frank Ruhl Libre', sans-serif;\">שלום</span>
ড্যানি স্মিথপ্রডাকশনস

যদি এনএসএট্রিবিউটেড স্ট্রিংয়ে এইচটিএমএল স্ট্রিংগুলি পার্স করার জন্য এটি স্টাইলটি ওয়েবকিট ব্যবহার করে, তবে এটি ব্যাকগ্রাউন্ড থ্রেডে সতর্কতার সাথে ব্যবহার করুন ...
ফুউজ

@ প্রজিৎ উত্তরের পরিবর্তে এই পদ্ধতির ব্যবহারের কী সুবিধা রয়েছে?
Emre Önder

18

আপনি যদি স্থানীয়করণের স্ট্রিং নিয়ে কাজ করছেন তবে আপনি বাক্যটির শেষে সর্বদা থাকায় গা bold় স্ট্রিংয়ের উপর নির্ভর করতে পারবেন না। যদি এটি হয় তবে নিম্নলিখিতগুলি ভালভাবে কাজ করে:

উদাহরণস্বরূপ ক্যোয়ারী "ব্লাহ" কোনও আইটেমের সাথে মেলে না

/* Create the search query part of the text, e.g. "blah". 
   The variable 'text' is just the value entered by  the user. */
let searchQuery = "\"\(text)\""

/* Put the search text into the message */
let message = "Query \(searchQuery). does not match any items"

/* Find the position of the search string. Cast to NSString as we want
   range to be of type NSRange, not Swift's Range<Index> */
let range = (message as NSString).rangeOfString(searchQuery)

/* Make the text at the given range bold. Rather than hard-coding a text size,
   Use the text size configured in Interface Builder. */
let attributedString = NSMutableAttributedString(string: message)
attributedString.addAttribute(NSFontAttributeName, value: UIFont.boldSystemFontOfSize(label.font.pointSize), range: range)

/* Put the text in a label */
label.attributedText = attributedString

4
কয়েক ঘন্টা অনুসন্ধানের পরেও এটিই একমাত্র উত্তর যা আমার সমস্যার সমাধান খুঁজে পেয়েছিল। +1
সিমন

9

এটিই আমি সেরাভাবে আসছি। আপনি যে কোনও জায়গা থেকে কল করতে পারেন এমন একটি ফাংশন যুক্ত করুন এবং এটি কনস্ট্যান্টস.উইউফ্টের মতো শ্রেণিবিহীন কোনও ফাইলে যুক্ত করুন এবং তারপরে আপনি কেবলমাত্র এক লাইনে ফোন করে অসংখ্য অনুষ্ঠানে যে কোনও স্ট্রিংয়ের মধ্যে শব্দগুলি উত্সাহিত করতে পারেন :

কনস্ট্যান্টস.ইউফিট ফাইলে যেতে:

import Foundation
import UIKit

func addBoldText(fullString: NSString, boldPartOfString: NSString, font: UIFont!, boldFont: UIFont!) -> NSAttributedString {
   let nonBoldFontAttribute = [NSFontAttributeName:font!]
   let boldFontAttribute = [NSFontAttributeName:boldFont!]
   let boldString = NSMutableAttributedString(string: fullString as String, attributes:nonBoldFontAttribute)
   boldString.addAttributes(boldFontAttribute, range: fullString.rangeOfString(boldPartOfString as String))
   return boldString
}

তারপরে আপনি যে কোনও ইউআইএবেলের জন্য কোডের এই একটি লাইনকে কল করতে পারেন:

self.UILabel.attributedText = addBoldText("Check again in 30 DAYS to find more friends", boldPartOfString: "30 DAYS", font: normalFont!, boldFont: boldSearchFont!)


//Mark: Albeit that you've had to define these somewhere:

let normalFont = UIFont(name: "INSERT FONT NAME", size: 15)
let boldFont = UIFont(name: "INSERT BOLD FONT", size: 15)

9

আমি ডেভিড ওয়েস্টের দুর্দান্ত উত্তরটি প্রসারিত করেছি যাতে আপনি একটি স্ট্রিং ইনপুট করতে পারেন এবং আপনি যে সমস্ত সাবস্ট্রিংগুলি উত্সাহিত করতে চান তা এটি বলতে পারেন :

func addBoldText(fullString: NSString, boldPartsOfString: Array<NSString>, font: UIFont!, boldFont: UIFont!) -> NSAttributedString {
    let nonBoldFontAttribute = [NSFontAttributeName:font!]
    let boldFontAttribute = [NSFontAttributeName:boldFont!]
    let boldString = NSMutableAttributedString(string: fullString as String, attributes:nonBoldFontAttribute)
    for i in 0 ..< boldPartsOfString.count {
        boldString.addAttributes(boldFontAttribute, range: fullString.rangeOfString(boldPartsOfString[i] as String))
    }
    return boldString
}

এবং তারপরে এটিকে কল করুন:

let normalFont = UIFont(name: "Dosis-Medium", size: 18)
let boldSearchFont = UIFont(name: "Dosis-Bold", size: 18)
self.UILabel.attributedText = addBoldText("Check again in 30 days to find more friends", boldPartsOfString: ["Check", "30 days", "find", "friends"], font: normalFont!, boldFont: boldSearchFont!)

এটি আপনার প্রদত্ত স্ট্রিংয়ে আপনি সাহসী করতে চান এমন সমস্ত সাবস্ট্রিংগুলিকে উত্সাহিত করবে


দুটি আলাদা জায়গায় একই শব্দ গা bold় হওয়া কি সম্ভব? EX: "30 বন্ধু খুঁজতে 30 দিনের মধ্যে আবার চেক করুন"। আপনি উভয়কে "30" কে সাহসী করবেন কীভাবে? আগাম ধন্যবাদ.
ডায়ান

8

জেরেমি Bader এবং ডেভিড ওয়েস্ট এর দুর্দান্ত উত্তর, একটি সুইফট 3 এক্সটেনশন উপর বিল্ডিং:

extension String {
    func withBoldText(boldPartsOfString: Array<NSString>, font: UIFont!, boldFont: UIFont!) -> NSAttributedString {
        let nonBoldFontAttribute = [NSFontAttributeName:font!]
        let boldFontAttribute = [NSFontAttributeName:boldFont!]
        let boldString = NSMutableAttributedString(string: self as String, attributes:nonBoldFontAttribute)
        for i in 0 ..< boldPartsOfString.count {
            boldString.addAttributes(boldFontAttribute, range: (self as NSString).range(of: boldPartsOfString[i] as String))
        }
        return boldString
    }
}

ব্যবহার:

let label = UILabel()
let font = UIFont(name: "AvenirNext-Italic", size: 24)!
let boldFont = UIFont(name: "AvenirNext-BoldItalic", size: 24)!
label.attributedText = "Make sure your face is\nbrightly and evenly lit".withBoldText(
    boldPartsOfString: ["brightly", "evenly"], font: font, boldFont: boldFont)

6

সুইফট 4 এবং উচ্চতর

সুইফট 4 এবং উচ্চতরগুলির জন্য এটি একটি ভাল উপায়:

    let attributsBold = [NSAttributedString.Key.font : UIFont.systemFont(ofSize: 16, weight: .bold)]
    let attributsNormal = [NSAttributedString.Key.font : UIFont.systemFont(ofSize: 16, weight: .regular)]
    var attributedString = NSMutableAttributedString(string: "Hi ", attributes:attributsNormal)
    let boldStringPart = NSMutableAttributedString(string: "John", attributes:attributsBold)
    attributedString.append(boldStringPart)
  
    yourLabel.attributedText = attributedString

লেবেলে পাঠ্যটি এমন দেখাচ্ছে: "হাই জন "


5

ব্যবহার ....

let attrString = NSMutableAttributedString()
            .appendWith(weight: .semibold, "almost bold")
            .appendWith(color: .white, weight: .bold, " white and bold")
            .appendWith(color: .black, ofSize: 18.0, " big black")

দুই সেন্ট ...

extension NSMutableAttributedString {

    @discardableResult func appendWith(color: UIColor = UIColor.darkText, weight: UIFont.Weight = .regular, ofSize: CGFloat = 12.0, _ text: String) -> NSMutableAttributedString{
        let attrText = NSAttributedString.makeWith(color: color, weight: weight, ofSize:ofSize, text)
        self.append(attrText)
        return self
    }

}
extension NSAttributedString {

    public static func makeWith(color: UIColor = UIColor.darkText, weight: UIFont.Weight = .regular, ofSize: CGFloat = 12.0, _ text: String) -> NSMutableAttributedString {

        let attrs = [NSAttributedStringKey.font: UIFont.systemFont(ofSize: ofSize, weight: weight), NSAttributedStringKey.foregroundColor: color]
        return NSMutableAttributedString(string: text, attributes:attrs)
    }
}

4
আইওএস 11 বা ততোধিক (ইউআইফন্ট.ওয়েট ব্যবহারের কারণে)।
আন্দ্রে লেগানজা

4

এই থ্রেডে প্রজিৎ শ্রেষ্ঠের প্রতিক্রিয়াটিকে বৈধ হিসাবে গ্রহণ করে , আমি লেবেলটি জানা থাকলে এবং ফন্টের বৈশিষ্ট্যগুলি ব্যবহার করে তার সমাধানটি প্রসারিত করতে চাই।

সুইফট 4

extension NSMutableAttributedString {

    @discardableResult func normal(_ text: String) -> NSMutableAttributedString {
        let normal = NSAttributedString(string: text)
        append(normal)

        return self
    }

    @discardableResult func bold(_ text: String, withLabel label: UILabel) -> NSMutableAttributedString {

        //generate the bold font
        var font: UIFont = UIFont(name: label.font.fontName , size: label.font.pointSize)!
        font = UIFont(descriptor: font.fontDescriptor.withSymbolicTraits(.traitBold) ?? font.fontDescriptor, size: font.pointSize)

        //generate attributes
        let attrs: [NSAttributedStringKey: Any] = [NSAttributedStringKey.font: font]
        let boldString = NSMutableAttributedString(string:text, attributes: attrs)

        //append the attributed text
        append(boldString)

        return self
    }
}

3

এটি করার জন্য দুর্দান্ত সহজ উপায়।

    let text = "This string is having multiple font"
    let attributedText = 
    NSMutableAttributedString.getAttributedString(fromString: text)

    attributedText.apply(font: UIFont.boldSystemFont(ofSize: 24), subString: 
    "This")

    attributedText.apply(font: UIFont.boldSystemFont(ofSize: 24), onRange: 
    NSMakeRange(5, 6))

আরও বিশদের জন্য এখানে ক্লিক করুন: https://github.com/iOSTechHub/AtributesString


কিভাবে আধা সাহসী?
হিউম্যান

এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। @ হিউম্যান উপরের লাইব্রেরিটি ব্যবহার করুন এবং applyআপনার যে ফন্টটি চান সেটি ব্যবহার করুন
জ্যাক শাপিরো

2

এটি দরকারী হতে পারে

class func createAttributedStringFrom (string1 : String ,strin2 : String, attributes1 : Dictionary<String, NSObject>, attributes2 : Dictionary<String, NSObject>) -> NSAttributedString{

let fullStringNormal = (string1 + strin2) as NSString
let attributedFullString = NSMutableAttributedString(string: fullStringNormal as String)

attributedFullString.addAttributes(attributes1, range: fullStringNormal.rangeOfString(string1))
attributedFullString.addAttributes(attributes2, range: fullStringNormal.rangeOfString(strin2))
return attributedFullString
}

2

সুইফট 3.0

আপনার প্রয়োজন অনুসারে এইচটিএমএলকে স্ট্রিং এবং ফন্টের পরিবর্তনে রূপান্তর করুন।

do {

     let str = try NSAttributedString(data: ("I'm a normal text and <b>this is my bold part . </b>And I'm again in the normal text".data(using: String.Encoding.unicode, allowLossyConversion: true)!), options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil)

     myLabel.attributedText = str
     myLabel.font =  MONTSERRAT_BOLD(23)
     myLabel.textAlignment = NSTextAlignment.left
} catch {
     print(error)
}


func MONTSERRAT_BOLD(_ size: CGFloat) -> UIFont
{
    return UIFont(name: "MONTSERRAT-BOLD", size: size)!
}

আপনার স্ট্রিংটি utf8 ব্যবহার করে ডেটাতে রূপান্তর করা উচিত। নোট করুন যে Data("I'm a normal text and <b>this is my bold part . </b>And I'm again in the normal text".utf8)[NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue]
ডেটাটি

1

জন্য -> অনুসন্ধান টেলিভিশন আকার অনুযায়ী

এনস্ট্রিং এবং এর ব্যাপ্তি ব্যবহার করে 1-উপায়

let query = "Television"
let headerTitle = "size"
let message = "Search \(query) by \(headerTitle)"
let range = (message as NSString).range(of: query)
let attributedString = NSMutableAttributedString(string: message)
attributedString.addAttribute(NSAttributedString.Key.font, value: UIFont.boldSystemFont(ofSize: label1.font.pointSize), range: range)
label1.attributedText = attributedString

অন্যটি এনস্ট্রিং এবং এর ব্যাপ্তি ব্যবহার না করে

let query = "Television"
let headerTitle = "size"
let (searchText, byText) = ("Search ", " by \(headerTitle)")
let attributedString = NSMutableAttributedString(string: searchText)
let byTextAttributedString = NSMutableAttributedString(string: byText)
let attrs = [NSAttributedString.Key.font : UIFont.boldSystemFont(ofSize: label1.font.pointSize)]
let boldString = NSMutableAttributedString(string: query, attributes:attrs)
attributedString.append(boldString)
attributedString.append(byTextAttributedString)
label1.attributedText = attributedString

swift5


0

কোডটি এই জাতীয় কিছু ব্যবহার করুন:

 let font = UIFont(name: "Your-Font-Name", size: 10.0)!

        let attributedText = NSMutableAttributedString(attributedString: noteLabel.attributedText!)
        let boldedRange = NSRange(attributedText.string.range(of: "Note:")!, in: attributedText.string)
        attributedText.addAttributes([NSAttributedString.Key.font : font], range: boldedRange)
        noteLabel.attributedText = attributedText

0

দ্রুত চারটে দুটি লাইনার:

            button.setAttributedTitle(.init(string: "My text", attributes: [.font: UIFont.systemFont(ofSize: 20, weight: .bold)]), for: .selected)
            button.setAttributedTitle(.init(string: "My text", attributes: [.font: UIFont.systemFont(ofSize: 20, weight: .regular)]), for: .normal)

0

NSAttributedString.Keyপরিবর্তে 5.1 ব্যবহার করুনNSAttributedStringKey

let test1Attributes:[NSAttributedString.Key: Any] = [.font : UIFont(name: "CircularStd-Book", size: 14)!]
let test2Attributes:[NSAttributedString.Key: Any] = [.font : UIFont(name: "CircularStd-Bold", size: 16)!]

let test1 = NSAttributedString(string: "\(greeting!) ", attributes:test1Attributes)
let test2 = NSAttributedString(string: firstName!, attributes:test2Attributes)
let text = NSMutableAttributedString()

text.append(test1)
text.append(test2)
return text

-1

প্রজিৎ শ্রেষ্ঠের উত্তরটির উন্নতি: -

আপনি এনএসমেটেবলএট্রিবিউটেড স্ট্রিংয়ের জন্য জেনেরিক এক্সটেনশন করতে পারেন যা কম কোড জড়িত। এই ক্ষেত্রে আমি সিস্টেম ফন্ট ব্যবহার করতে বেছে নিয়েছি তবে আপনি এটি মানিয়ে নিতে পারেন যাতে আপনি পরামিতি হিসাবে ফন্টের নাম ইনপুট করতে পারেন।

    extension NSMutableAttributedString {

        func systemFontWith(text: String, size: CGFloat, weight: CGFloat) -> NSMutableAttributedString {
            let attributes: [String: AnyObject] = [NSFontAttributeName: UIFont.systemFont(ofSize: size, weight: weight)]
            let string = NSMutableAttributedString(string: text, attributes: attributes)
            self.append(string)
            return self
        }
    }

-1

আপনি নীচে লিখিত সহজ কাস্টম পদ্ধতি ব্যবহার করে এটি করতে পারেন। আপনি প্রথম প্যারামিটারে পুরো স্ট্রিং দিয়েছেন এবং দ্বিতীয় প্যারামিটারে সাহসী হওয়ার জন্য পাঠ্য দিয়েছেন। আশা করি এটি সাহায্য করবে।

func getAttributedBoldString(str : String, boldTxt : String) -> NSMutableAttributedString {
        let attrStr = NSMutableAttributedString.init(string: str)
        let boldedRange = NSRange(str.range(of: boldTxt)!, in: str)
        attrStr.addAttributes([NSAttributedString.Key.font : UIFont.systemFont(ofSize: 17, weight: .bold)], range: boldedRange)
        return attrStr
    }

ব্যবহার: initalString = আমি একটি ছেলে

ফলাফল স্ট্রিং = আমি একটি ছেলে

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