আমি কীভাবে সুইফট ব্যবহার করে একটি বিশিষ্ট স্ট্রিং তৈরি করব?


316

আমি একটি সাধারণ কফি ক্যালকুলেটর তৈরি করার চেষ্টা করছি। আমাকে গ্রামে কফির পরিমাণটি প্রদর্শন করা দরকার। গ্রামের জন্য "g" চিহ্নটি আমার ইউআইবিবেলের সাথে সংযুক্ত করা দরকার যা আমি পরিমাণটি প্রদর্শন করতে ব্যবহার করছি। ইউআইএলবেলে নম্বরগুলি ইউনিক ইনপুটের সাথে ডাইনামিকভাবে পরিবর্তিত হচ্ছে ঠিক সূক্ষ্ম, তবে স্ট্রিংয়ের শেষে আমার একটি ছোট কেস "জি" যুক্ত করা দরকার যা আপডেটিং সংখ্যার চেয়ে আলাদাভাবে ফর্ম্যাটেড হয়। "G" টি সংখ্যার সাথে সংযুক্ত হওয়া দরকার যাতে সংখ্যার আকার এবং অবস্থান পরিবর্তনের সাথে সাথে "g" "সংখ্যাগুলি নিয়ে" সরে যায়। আমি নিশ্চিত যে এই সমস্যার আগেই সমাধান হয়ে গেছে তাই সঠিক দিকের একটি লিঙ্ক সহায়ক হবে কারণ আমি আমার ছোট্ট হৃদয়কে বাইরে বের করে দিয়েছি।

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

var coffeeAmount: String = calculatedCoffee + attributedText

যেখানে ক্যালকুলেটকড কফি হ'ল একটি ইন্টারে রূপান্তরিত হয় এবং "অ্যাট্রিবিউটটেক্সট" হ'ল ছোট ছোট "জি" কাস্টমাইজড ফন্ট যা আমি তৈরির চেষ্টা করছি with হয়তো আমি এই ভুল পথে চলছি। কোন সাহায্য প্রশংসা করা হয়!

উত্তর:


969

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

এই উত্তরটি সুইফট ৪.২-এর জন্য আপডেট করা হয়েছে।

দ্রুত রেফারেন্স

কোনও বৈশিষ্ট্যযুক্ত স্ট্রিং তৈরি এবং সেট করার জন্য সাধারণ ফর্মটি এই জাতীয়। আপনি নীচে অন্যান্য সাধারণ বিকল্পগুলি খুঁজে পেতে পারেন।

// create attributed string
let myString = "Swift Attributed String"
let myAttribute = [ NSAttributedString.Key.foregroundColor: UIColor.blue ]
let myAttrString = NSAttributedString(string: myString, attributes: myAttribute) 

// set attributed text on a UILabel
myLabel.attributedText = myAttrString

লেখার রঙ

let myAttribute = [ NSAttributedString.Key.foregroundColor: UIColor.blue ]

পেছনের রঙ

let myAttribute = [ NSAttributedString.Key.backgroundColor: UIColor.yellow ]

ফন্ট

let myAttribute = [ NSAttributedString.Key.font: UIFont(name: "Chalkduster", size: 18.0)! ]

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

let myAttribute = [ NSAttributedString.Key.underlineStyle: NSUnderlineStyle.single.rawValue ]

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

let myShadow = NSShadow()
myShadow.shadowBlurRadius = 3
myShadow.shadowOffset = CGSize(width: 3, height: 3)
myShadow.shadowColor = UIColor.gray

let myAttribute = [ NSAttributedString.Key.shadow: myShadow ]

এই পোস্টের বাকী যারা আগ্রহী তাদের আরও বিশদ দেয়।


আরোপ করা

স্ট্রিং বৈশিষ্ট্যগুলি আকারে কেবল একটি অভিধান [NSAttributedString.Key: Any], যেখানে NSAttributedString.Keyবৈশিষ্ট্যের মূল নাম এবং Anyকোনও প্রকারের মান। মান হরফ, রঙ, পূর্ণসংখ্যা বা অন্য কিছু হতে পারে। সুইফটে অনেক মানক বৈশিষ্ট্য রয়েছে যা ইতিমধ্যে পূর্বনির্ধারিত হয়ে গেছে। উদাহরণ স্বরূপ:

  • মূল নাম:, NSAttributedString.Key.fontমান: কUIFont
  • মূল নাম:, NSAttributedString.Key.foregroundColorমান: কUIColor
  • কী নাম:, NSAttributedString.Key.linkমান: একটি NSURLবাNSString

আরও অনেকে আছেন। আরও জন্য এই লিঙ্কটি দেখুন। আপনি নিজের কাস্টম বৈশিষ্ট্যগুলিও এর মতো করতে পারেন:

  • কী নাম:, NSAttributedString.Key.myNameমান: কিছু প্রকার।
    যদি আপনি কোনও এক্সটেনশন করেন :

    extension NSAttributedString.Key {
        static let myName = NSAttributedString.Key(rawValue: "myCustomAttributeKey")
    }

সুইফটে বৈশিষ্ট্য তৈরি করা হচ্ছে

আপনি অন্য কোনও অভিধান ঘোষণার মতো বৈশিষ্ট্যগুলি ঘোষণা করতে পারেন।

// single attributes declared one at a time
let singleAttribute1 = [ NSAttributedString.Key.foregroundColor: UIColor.green ]
let singleAttribute2 = [ NSAttributedString.Key.backgroundColor: UIColor.yellow ]
let singleAttribute3 = [ NSAttributedString.Key.underlineStyle: NSUnderlineStyle.double.rawValue ]

// multiple attributes declared at once
let multipleAttributes: [NSAttributedString.Key : Any] = [
    NSAttributedString.Key.foregroundColor: UIColor.green,
    NSAttributedString.Key.backgroundColor: UIColor.yellow,
    NSAttributedString.Key.underlineStyle: NSUnderlineStyle.double.rawValue ]

// custom attribute
let customAttribute = [ NSAttributedString.Key.myName: "Some value" ]

নোট করুন rawValueআন্ডারলাইন শৈলীর মানের জন্য এটি প্রয়োজনীয় ছিল তা ।

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

var multipleAttributes = [NSAttributedString.Key : Any]()
multipleAttributes[NSAttributedString.Key.foregroundColor] = UIColor.green
multipleAttributes[NSAttributedString.Key.backgroundColor] = UIColor.yellow
multipleAttributes[NSAttributedString.Key.underlineStyle] = NSUnderlineStyle.double.rawValue

অ্যাট্রিবিউট স্ট্রিংস

এখন আপনি যে বৈশিষ্ট্যগুলি বুঝতে পারছেন, আপনি বিশিষ্ট স্ট্রিং তৈরি করতে পারেন।

আরম্ভ

বিশিষ্ট স্ট্রিংগুলি তৈরি করার কয়েকটি উপায় রয়েছে। আপনার যদি কেবল পঠনযোগ্য কেবল স্ট্রিংয়ের প্রয়োজন হয় তবে আপনি ব্যবহার করতে পারেন NSAttributedString। এটি সূচনা করার কিছু উপায় এখানে রয়েছে:

// Initialize with a string only
let attrString1 = NSAttributedString(string: "Hello.")

// Initialize with a string and inline attribute(s)
let attrString2 = NSAttributedString(string: "Hello.", attributes: [NSAttributedString.Key.myName: "A value"])

// Initialize with a string and separately declared attribute(s)
let myAttributes1 = [ NSAttributedString.Key.foregroundColor: UIColor.green ]
let attrString3 = NSAttributedString(string: "Hello.", attributes: myAttributes1)

আপনার যদি পরে বৈশিষ্ট্য বা স্ট্রিং সামগ্রী পরিবর্তন করতে হয় তবে আপনার ব্যবহার করা উচিত NSMutableAttributedString। ঘোষণাগুলি খুব অনুরূপ:

// Create a blank attributed string
let mutableAttrString1 = NSMutableAttributedString()

// Initialize with a string only
let mutableAttrString2 = NSMutableAttributedString(string: "Hello.")

// Initialize with a string and inline attribute(s)
let mutableAttrString3 = NSMutableAttributedString(string: "Hello.", attributes: [NSAttributedString.Key.myName: "A value"])

// Initialize with a string and separately declared attribute(s)
let myAttributes2 = [ NSAttributedString.Key.foregroundColor: UIColor.green ]
let mutableAttrString4 = NSMutableAttributedString(string: "Hello.", attributes: myAttributes2)

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

উদাহরণস্বরূপ, আসুন এই পোস্টের শীর্ষে বিশিষ্ট স্ট্রিং তৈরি করুন।

প্রথমে NSMutableAttributedStringএকটি নতুন ফন্টের বৈশিষ্ট্য সহ একটি তৈরি করুন ।

let myAttribute = [ NSAttributedString.Key.font: UIFont(name: "Chalkduster", size: 18.0)! ]
let myString = NSMutableAttributedString(string: "Swift", attributes: myAttribute )

আপনি যদি পাশাপাশি কাজ করে থাকেন তবে এইভাবে একটি UITextView(বা UILabel) এর জন্য বিশিষ্ট স্ট্রিংটি সেট করুন :

textView.attributedText = myString

আপনি ব্যবহার করবেন নাtextView.text

ফলাফল এখানে:

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

তারপরে আর একটি বৈশিষ্ট্যযুক্ত স্ট্রিং যুক্ত করুন যার কোনও বৈশিষ্ট্য সেট নেই। (লক্ষ্য করুন যে যদিও আমি উপরে letঘোষণা myStringদিয়েছি, তবুও আমি এটি পরিবর্তন করতে পারি কারণ এটি একটি NSMutableAttributedString। এটি আমার কাছে বরং অপ্রয়োজনীয় বলে মনে হয় এবং ভবিষ্যতে এই পরিবর্তনগুলি ঘটলে আমি অবাক হব না that ঘটনাটি ঘটলে আমাকে একটি মন্তব্য দিন))

let attrString = NSAttributedString(string: " Attributed Strings")
myString.append(attrString)

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

এরপরে আমরা কেবল "স্ট্রিংস" শব্দটি নির্বাচন করব, যা সূচকে শুরু হয় 17এবং এর দৈর্ঘ্য রয়েছে 7। লক্ষ্য করুন যে এটি একটি NSRangeএবং একটি সুইফট নয় Range। ( পরিসীমা সম্পর্কে আরও তথ্যের জন্য এই উত্তরটি দেখুন )) addAttributeপদ্ধতিটি আমাদের প্রথম স্থানটিতে অ্যাট্রিবিউটের কী নাম, দ্বিতীয় স্থানের বৈশিষ্ট্যের মান এবং তৃতীয় স্থানে ব্যাপ্তি রাখতে দেয়।

var myRange = NSRange(location: 17, length: 7) // range starting at location 17 with a lenth of 7: "Strings"
myString.addAttribute(NSAttributedString.Key.foregroundColor, value: UIColor.red, range: myRange)

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

শেষ পর্যন্ত, একটি পটভূমি রঙ যুক্ত করা যাক। বিভিন্নতার জন্য, আসুন addAttributesপদ্ধতিটি ব্যবহার করুন (নোটটি নোট করুন s)। আমি এই পদ্ধতির সাথে একসাথে একাধিক বৈশিষ্ট্য যুক্ত করতে পারি, তবে আমি আবার একটি যুক্ত করব।

myRange = NSRange(location: 3, length: 17)
let anotherAttribute = [ NSAttributedString.Key.backgroundColor: UIColor.yellow ]
myString.addAttributes(anotherAttribute, range: myRange)

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

লক্ষ্য করুন যে বৈশিষ্ট্যগুলি কিছু জায়গায় ওভারল্যাপ হচ্ছে। একটি বৈশিষ্ট্য যুক্ত করা ইতিমধ্যে সেখানে থাকা কোনও গুণকে ওভাররাইট করে না।

সম্পর্কিত

আরও পড়া


4
নোট করুন যে আপনি আন্ডারলাইন করার জন্য বেশ কয়েকটি শৈলীর সংমিশ্রণ করতে পারেন, যেমনNSUnderlineStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue | NSUnderlineStyle.PatternDot.rawValue
মৌমাছি

3
আপনি এনএসএট্রিবিউটেড স্ট্রিংটি এনএসএট্রিবিউটেড স্ট্রিং এ এনএসমুট্যাবল অ্যাট্রিবিউটেড স্ট্রিংয়ে থাকতে হবে তা ব্যবহার করতে পারবেন না, আপনি কি এই উত্তরটি প্রতিফলিত করতে আপডেট করতে পারবেন?
জোসেফ আস্ট্রাহান

3
1) আপনার উত্তরের জন্য সুপার ধন্যবাদ। 2) আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি স্থান হবে textView.atrributedtText = myStringবা myLabel.attributedText = myStringপ্রারম্ভে আপনার উত্তরের বিষয়ে। নবাগত হিসাবে আমি কেবল করছিলাম myLabel.textএবং আমার আপনার সমস্ত উত্তরের মধ্য দিয়ে যাওয়ার দরকার মনে করেনি * ** 3) ** এর অর্থ কী আপনি কেবলই থাকতে পারেন attributedTextবা textউভয়কেই অর্থহীন হতে পারে? 4) আমি সুপারিশ করছি যে আপনি এছাড়াও ইনকর্পোরেট lineSpacingমত উদাহরণ এই এটা যেমন আপনার উত্তর খুব দরকারী। 5) ачаар дахин
মধু

1
সংযোজন এবং যুক্তের মধ্যে পার্থক্যটি প্রথমে বিভ্রান্তিকর ছিল। appendAttributedString'স্ট্রিং কনটেনটেশন' এর মতো। addAttributeআপনার স্ট্রিংয়ে একটি নতুন বৈশিষ্ট্য যুক্ত করছে।
মধু

2
@ ড্যানিয়েল, addAttributeএর একটি পদ্ধতি NSMutableAttributedString। আপনি ঠিক বলেছেন যে আপনি এটি দিয়ে Stringবা ব্যবহার করতে পারবেন না NSAttributedString। ( এই পোস্টের একটি অ্যাট্রিবিউটেড স্ট্রিং বিভাগে পরিবর্তনটিmyString সংজ্ঞাটি পরীক্ষা করে দেখুন think আমি মনে করি আপনাকে ফেলে দিয়েছি কারণ আমি যে পোস্টটির এটি ছিল তার প্রথম অংশে চলক নামের জন্যও ব্যবহার করেছি ))myStringNSAttributedString
সুরাগ

114

NSMutableAttributedStringওবজ-সি একইভাবে সুইফট ব্যবহার করে। আপনি স্ট্রিং হিসাবে গণনা করা মানটি পাস করে এটি ইনস্ট্যান্ট করবেন:

var attributedString = NSMutableAttributedString(string:"\(calculatedCoffee)")

এখন gবিশিষ্ট স্ট্রিং তৈরি করুন (হি)। দ্রষ্টব্য: UIFont.systemFontOfSize(_) এখন একটি অনুপযুক্ত আরম্ভকারী, সুতরাং এটি ব্যবহার করার আগে এটি আবদ্ধ হতে হবে:

var attrs = [NSFontAttributeName : UIFont.systemFontOfSize(19.0)!]
var gString = NSMutableAttributedString(string:"g", attributes:attrs)

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

attributedString.appendAttributedString(gString)

তারপরে আপনি ইউএসএবেলকে এনএসএট্রিবিউটেড স্ট্রিংটি এভাবে প্রদর্শন করতে পারেন:

myLabel.attributedText = attributedString

//Part 1 Set Up The Lower Case g var coffeeText = NSMutableAttributedString(string:"\(calculateCoffee())") //Part 2 set the font attributes for the lower case g var coffeeTypeFaceAttributes = [NSFontAttributeName : UIFont.systemFontOfSize(18)] //Part 3 create the "g" character and give it the attributes var coffeeG = NSMutableAttributedString(string:"g", attributes:coffeeTypeFaceAttributes) আমি যখন আমার ইউআইএলবেল.টেক্সট = কফিটেক্সট সেট করি তখন আমি একটি ত্রুটি পাই "এনএসউটেবল অ্যাট্রিবিউটেড স্ট্রিং 'স্ট্রিং'-তে রূপান্তরযোগ্য নয় the ইউআইএলবেলকে এনএস পরিবর্তনযোগ্য অ্যাট্রিবিউটেড স্ট্রিং গ্রহণ করার উপায় আছে কি?
ডিসিবেঞ্জি

11
যখন আপনার একটি বৈশিষ্ট্যযুক্ত স্ট্রিং থাকে, আপনার লেবেলের বৈশিষ্ট্যের পরিবর্তে আপনার লেবেলের অ্যাট্রিবিউটটেক্সট সম্পত্তি সেট করতে হবে।
এনআরিত

1
এটি সঠিকভাবে কাজ করেছে এবং আমার ছোট কেস "জি" এখন আমার কফির পরিমাণের পাঠ্যের শেষে সংযোজন করছে
ডিসিবেঞ্জি

2
কোনও কারণে আমি এনএসএটিগ্রিবিউটস্ট্রিংয়ের সাথে আমার লাইনে একটি ত্রুটি "কলে অতিরিক্ত যুক্তি" পাই। এটি কেবল তখনই ঘটে যখন আমি UIFont.systemFontOfSize (18) এ UIFont (নাম: "আরিয়াল", আকার: 20) স্যুইচ করি। কোন ধারনা?
21

ইউআইফন্ট (নাম: আকার :) একটি অনুপলব্ধ আরম্ভকারী এবং শূন্যতায় ফিরে আসতে পারে। আপনি হয় স্পষ্টভাবে যোগ করে এটি মোড়ক! আপনি ডিকশনারিটিতে sertোকানোর আগে শেষের দিকে বা এটি-এ / লেট স্টেটমেন্ট দিয়ে একটি ভেরিয়েবলের সাথে আবদ্ধ করুন।
অ্যাশ

21

এক্সকোড 6 সংস্করণ :

let attriString = NSAttributedString(string:"attriString", attributes:
[NSForegroundColorAttributeName: UIColor.lightGrayColor(), 
            NSFontAttributeName: AttriFont])

এক্সকোড 9.3 সংস্করণ :

let attriString = NSAttributedString(string:"attriString", attributes:
[NSAttributedStringKey.foregroundColor: UIColor.lightGray, 
            NSAttributedStringKey.font: AttriFont])

এক্সকোড 10, আইওএস 12, সুইফট 4 :

let attriString = NSAttributedString(string:"attriString", attributes:
[NSAttributedString.Key.foregroundColor: UIColor.lightGray, 
            NSAttributedString.Key.font: AttriFont])

20

সুইফট 4:

let attributes = [NSAttributedStringKey.font: UIFont(name: "HelveticaNeue-Bold", size: 17)!, 
                  NSAttributedStringKey.foregroundColor: UIColor.white]

এটি সংকলন করে নাType 'NSAttributedStringKey' (aka 'NSString') has no member 'font'
বাইবেসী

আমি এটি সবেমাত্র নতুন এক্সকোডে চেষ্টা করেছি (10 বিটা 6) এবং এটি সংকলন করে, আপনি কি সুইফট 4 ব্যবহার করছেন তা নিশ্চিত?
অ্যাডাম বার্ডন

আমি সুইফট 3
বিবিসি

4
ঠিক এটিই সমস্যা, আমার উত্তরের "সুইফট 4" শিরোনাম রয়েছে, আমি আপনাকে সুপারিশ করছি আপনি সুইফট 4
অ্যাডাম বার্ডন

@ বিবিসি আপনি এনএস্যাট্রিবিউটেড স্ট্রিং.কি ব্যবহার করতে পারেন। ***
হাতিম

19

আমি উচ্চারণযুক্ত স্ট্রিংয়ের জন্য একটি গ্রন্থাগার ব্যবহারের সুপারিশ করব। আপনি এটি যখন এটি চান এটি আরও সহজ করে তোলে উদাহরণস্বরূপ, চারটি ভিন্ন রঙ এবং চারটি ভিন্ন ফন্টের সাথে একটি স্ট্রিং। এখানে আমার প্রিয়। এটিকে সুইফটিঅ্যাট্রিবিউটস বলা হয়

আপনি যদি SwiftyAttributes ব্যবহার করে চারটি ভিন্ন রঙ এবং বিভিন্ন ফন্টের সাথে একটি স্ট্রিং তৈরি করতে চান:

let magenta = "Hello ".withAttributes([
    .textColor(.magenta),
    .font(.systemFont(ofSize: 15.0))
    ])
let cyan = "Sir ".withAttributes([
    .textColor(.cyan),
    .font(.boldSystemFont(ofSize: 15.0))
    ])
let green = "Lancelot".withAttributes([
    .textColor(.green),
    .font(.italicSystemFont(ofSize: 15.0))

    ])
let blue = "!".withAttributes([
    .textColor(.blue),
    .font(.preferredFont(forTextStyle: UIFontTextStyle.headline))

    ])
let finalString = magenta + cyan + green + blue

finalString হিসাবে প্রদর্শিত হবে

চিত্র হিসাবে দেখায়


15

সুইফট: এক্সকোড 6.1

    let font:UIFont? = UIFont(name: "Arial", size: 12.0)

    let attrString = NSAttributedString(
        string: titleData,
        attributes: NSDictionary(
            object: font!,
            forKey: NSFontAttributeName))

10

আইওএস-এ অ্যাট্রিবিউটেড স্ট্রিংগুলির কাছে যাওয়ার সর্বোত্তম উপায় হ'ল ইন্টারফেস বিল্ডারে বিল্ট-ইন অ্যাট্রিবিউটেড টেক্সট এডিটর ব্যবহার করে এবং আপনার উত্স ফাইলগুলিতে অনিয়মিত হার্ডকোডিং এনএসআর্ট্রিবিউটেড স্ট্রিংকিগুলি এড়ানো।

আপনি পরে এই এক্সটেনশনটি ব্যবহার করে রানটাইমগুলিতে গতিশীল প্লেসহোর্ডারগুলি প্রতিস্থাপন করতে পারেন:

extension NSAttributedString {
    func replacing(placeholder:String, with valueString:String) -> NSAttributedString {

        if let range = self.string.range(of:placeholder) {
            let nsRange = NSRange(range,in:valueString)
            let mutableText = NSMutableAttributedString(attributedString: self)
            mutableText.replaceCharacters(in: nsRange, with: valueString)
            return mutableText as NSAttributedString
        }
        return self
    }
}

এর মতো দেখতে বিশিষ্ট পাঠ্য সহ একটি স্টোরিবোর্ড লেবেল যুক্ত করুন।

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

তারপরে আপনার প্রতিটি বারের মতো প্রয়োজন অনুসারে আপনি কেবল মূল্যটি আপডেট করুন:

label.attributedText = initalAttributedString.replacing(placeholder: "<price>", with: newValue)

আসল মানটিকে ইনিটাল্ট্রিবিউটেড স্ট্রিংয়ে সংরক্ষণ করা নিশ্চিত করুন।

আপনি এই নিবন্ধটি পড়ার মাধ্যমে এই পদ্ধতিটি আরও ভালভাবে বুঝতে পারবেন: https://medium.com/mobile-appetite/text-attributes-on-ios-the-effortless-approach-ff086588173e


এটি আমার ক্ষেত্রে সত্যই সহায়ক ছিল, যেখানে আমার কাছে স্টোরিবোর্ড ছিল এবং কেবল একটি লেবেলের স্ট্রিংয়ের অংশে সাহস যোগ করতে চেয়েছিল। সমস্ত বৈশিষ্ট্য ম্যানুয়ালি সেটআপ করার চেয়ে অনেক সহজ।
মার্ক অ্যাটিনিসি

এই এক্সটেনশনটি আমার জন্য নিখুঁতভাবে কাজ করেছিল, তবে এক্সকোড 11 এ এটি আমার অ্যাপটিকে let nsRange = NSRange(range,in:valueString)লাইনে ক্র্যাশ করেছে ।
লুকাস পি।

9

সুইফট ২.০

এখানে একটি নমুনা দেওয়া হল:

let newsString: NSMutableAttributedString = NSMutableAttributedString(string: "Tap here to read the latest Football News.")
newsString.addAttributes([NSUnderlineStyleAttributeName: NSUnderlineStyle.StyleDouble.rawValue], range: NSMakeRange(4, 4))
sampleLabel.attributedText = newsString.copy() as? NSAttributedString

সুইফট 5.x

let newsString: NSMutableAttributedString = NSMutableAttributedString(string: "Tap here to read the latest Football News.")
newsString.addAttributes([NSAttributedString.Key.underlineStyle: NSUnderlineStyle.double.rawValue], range: NSMakeRange(4, 4))
sampleLabel.attributedText = newsString.copy() as? NSAttributedString

অথবা

let stringAttributes = [
    NSFontAttributeName : UIFont(name: "Helvetica Neue", size: 17.0)!,
    NSUnderlineStyleAttributeName : 1,
    NSForegroundColorAttributeName : UIColor.orangeColor(),
    NSTextEffectAttributeName : NSTextEffectLetterpressStyle,
    NSStrokeWidthAttributeName : 2.0]
let atrributedString = NSAttributedString(string: "Sample String: Attributed", attributes: stringAttributes)
sampleLabel.attributedText = atrributedString

8

বিটা 6 এ ভাল কাজ করে

let attrString = NSAttributedString(
    string: "title-title-title",
    attributes: NSDictionary(
       object: NSFont(name: "Arial", size: 12.0), 
       forKey: NSFontAttributeName))

7

আমি একটি অনলাইন সরঞ্জাম তৈরি করেছি যা আপনার সমস্যার সমাধান করতে চলেছে! আপনি আপনার স্ট্রিং লিখতে পারেন এবং শৈলীগুলি গ্রাফিকভাবে প্রয়োগ করতে পারেন এবং সরঞ্জামটি আপনাকে স্ট্রিংটি তৈরি করতে উদ্দেশ্য-সি এবং সুইফ্ট কোড দেয়।

এছাড়াও ওপেন সোর্স তাই এটিকে প্রসারিত করতে এবং পিআর পাঠাতে নির্দ্বিধায়।

ট্রান্সফর্মার সরঞ্জাম

GitHub

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


আমার জন্য কাজ করছে না। এটি কেবল কোনও স্টাইল প্রয়োগ না করে সবকিছুকে বন্ধনীতে আবৃত করে।
ড্যানিয়েল স্প্রিঞ্জার

5
func decorateText(sub:String, des:String)->NSAttributedString{
    let textAttributesOne = [NSAttributedStringKey.foregroundColor: UIColor.darkText, NSAttributedStringKey.font: UIFont(name: "PTSans-Bold", size: 17.0)!]
    let textAttributesTwo = [NSAttributedStringKey.foregroundColor: UIColor.black, NSAttributedStringKey.font: UIFont(name: "PTSans-Regular", size: 14.0)!]

    let textPartOne = NSMutableAttributedString(string: sub, attributes: textAttributesOne)
    let textPartTwo = NSMutableAttributedString(string: des, attributes: textAttributesTwo)

    let textCombination = NSMutableAttributedString()
    textCombination.append(textPartOne)
    textCombination.append(textPartTwo)
    return textCombination
}

//বাস্তবায়ন

cell.lblFrom.attributedText = decorateText(sub: sender!, des: " - \(convertDateFormatShort3(myDateString: datetime!))")

5

সুইফট 5 এবং উপরে

   let attributedString = NSAttributedString(string:"targetString",
                                   attributes:[NSAttributedString.Key.foregroundColor: UIColor.lightGray,
                                               NSAttributedString.Key.font: UIFont(name: "Arial", size: 18.0) as Any])

4

সুইফট 4

let attributes = [NSAttributedStringKey.font : UIFont(name: CustomFont.NAME_REGULAR.rawValue, size: CustomFontSize.SURVEY_FORM_LABEL_SIZE.rawValue)!]

let attributedString : NSAttributedString = NSAttributedString(string: messageString, attributes: attributes)

আপনি সুইফট 4 এ কাঁচা মানটি সরিয়ে ফেলতে হবে


3

আমার জন্য উপরের সমাধানগুলি নির্দিষ্ট রঙ বা সম্পত্তি সেট করার সময় কাজ করে না।

এটি কাজ করেছে:

let attributes = [
    NSFontAttributeName : UIFont(name: "Helvetica Neue", size: 12.0)!,
    NSUnderlineStyleAttributeName : 1,
    NSForegroundColorAttributeName : UIColor.darkGrayColor(),
    NSTextEffectAttributeName : NSTextEffectLetterpressStyle,
    NSStrokeWidthAttributeName : 3.0]

var atriString = NSAttributedString(string: "My Attributed String", attributes: attributes)

3

সুইফট 2.1 - এক্সকোড 7

let labelFont = UIFont(name: "HelveticaNeue-Bold", size: 18)
let attributes :[String:AnyObject] = [NSFontAttributeName : labelFont!]
let attrString = NSAttributedString(string:"foo", attributes: attributes)
myLabel.attributedText = attrString

সুইফট ২.০ থেকে ২.১ এর মধ্যে কী পরিবর্তন করা হয়েছিল?
সুরগাচ

3

এই নমুনা কোডটি ব্যবহার করুন। আপনার প্রয়োজনীয়তা অর্জনের জন্য এটি খুব সংক্ষিপ্ত কোড। এটা আমার জন্য কাজ করছে।

let attributes = [NSAttributedStringKey.font : UIFont(name: CustomFont.NAME_REGULAR.rawValue, size: CustomFontSize.SURVEY_FORM_LABEL_SIZE.rawValue)!]

let attributedString : NSAttributedString = NSAttributedString(string: messageString, attributes: attributes)

2
extension UILabel{
    func setSubTextColor(pSubString : String, pColor : UIColor){    
        let attributedString: NSMutableAttributedString = self.attributedText != nil ? NSMutableAttributedString(attributedString: self.attributedText!) : NSMutableAttributedString(string: self.text!);

        let range = attributedString.mutableString.range(of: pSubString, options:NSString.CompareOptions.caseInsensitive)
        if range.location != NSNotFound {
            attributedString.addAttribute(NSForegroundColorAttributeName, value: pColor, range: range);
        }
        self.attributedText = attributedString
    }
}

সেল.আইবিবেলগুয়েস্টঅপুইমেন্টমেন্টটাইম.টেক্সট = "\ n \ n গুয়েস্ট 1 \ n8: 00 এএম u n u n গুয়েস্ট 2 \ n9: 00 এএম \ n \ n" সেল। .setSubTextColor (pSubString: "অতিথি 2", প্লেসার: UIColor.red)
দীপক

1
এসও আপনাকে স্বাগতম। আপনার কোডটি ফর্ম্যাট করুন এবং আপনার উত্তরে কিছু ব্যাখ্যা / প্রসঙ্গ যুক্ত করুন। দেখুন: stackoverflow.com/help/how-to-answer
Uwe Allner

2

বৈশিষ্ট্যগুলি দ্রুত সুইফ্ট 3 এ সেট করা যেতে পারে ...

    let attributes = NSAttributedString(string: "String", attributes: [NSFontAttributeName : UIFont(name: "AvenirNext-Medium", size: 30)!,
         NSForegroundColorAttributeName : UIColor .white,
         NSTextEffectAttributeName : NSTextEffectLetterpressStyle])

তারপরে বৈশিষ্ট্য সহ যে কোনও শ্রেণিতে ভেরিয়েবল ব্যবহার করুন able


2

সুইফট 4.2

extension UILabel {

    func boldSubstring(_ substr: String) {
        guard substr.isEmpty == false,
            let text = attributedText,
            let range = text.string.range(of: substr, options: .caseInsensitive) else {
                return
        }
        let attr = NSMutableAttributedString(attributedString: text)
        let start = text.string.distance(from: text.string.startIndex, to: range.lowerBound)
        let length = text.string.distance(from: range.lowerBound, to: range.upperBound)
        attr.addAttributes([NSAttributedStringKey.font: UIFont.boldSystemFont(ofSize: self.font.pointSize)],
                           range: NSMakeRange(start, length))
        attributedText = attr
    }
}

কেন দৈর্ঘ্যের জন্য কেবল সীমাবদ্ধতা?
লিও ডাবাস

2

বিস্তারিত

  • সুইফ্ট 5.2, এক্সকোড 11.4 (11E146)

সমাধান

protocol AttributedStringComponent {
    var text: String { get }
    func getAttributes() -> [NSAttributedString.Key: Any]?
}

// MARK: String extensions

extension String: AttributedStringComponent {
    var text: String { self }
    func getAttributes() -> [NSAttributedString.Key: Any]? { return nil }
}

extension String {
    func toAttributed(with attributes: [NSAttributedString.Key: Any]?) -> NSAttributedString {
        .init(string: self, attributes: attributes)
    }
}

// MARK: NSAttributedString extensions

extension NSAttributedString: AttributedStringComponent {
    var text: String { string }

    func getAttributes() -> [Key: Any]? {
        if string.isEmpty { return nil }
        var range = NSRange(location: 0, length: string.count)
        return attributes(at: 0, effectiveRange: &range)
    }
}

extension NSAttributedString {

    convenience init?(from attributedStringComponents: [AttributedStringComponent],
                      defaultAttributes: [NSAttributedString.Key: Any],
                      joinedSeparator: String = " ") {
        switch attributedStringComponents.count {
        case 0: return nil
        default:
            var joinedString = ""
            typealias SttributedStringComponentDescriptor = ([NSAttributedString.Key: Any], NSRange)
            let sttributedStringComponents = attributedStringComponents.enumerated().flatMap { (index, component) -> [SttributedStringComponentDescriptor] in
                var components = [SttributedStringComponentDescriptor]()
                if index != 0 {
                    components.append((defaultAttributes,
                                       NSRange(location: joinedString.count, length: joinedSeparator.count)))
                    joinedString += joinedSeparator
                }
                components.append((component.getAttributes() ?? defaultAttributes,
                                   NSRange(location: joinedString.count, length: component.text.count)))
                joinedString += component.text
                return components
            }

            let attributedString = NSMutableAttributedString(string: joinedString)
            sttributedStringComponents.forEach { attributedString.addAttributes($0, range: $1) }
            self.init(attributedString: attributedString)
        }
    }
}

ব্যবহার

let defaultAttributes = [
    .font: UIFont.systemFont(ofSize: 16, weight: .regular),
    .foregroundColor: UIColor.blue
] as [NSAttributedString.Key : Any]

let marketingAttributes = [
    .font: UIFont.systemFont(ofSize: 20.0, weight: .bold),
    .foregroundColor: UIColor.black
] as [NSAttributedString.Key : Any]

let attributedStringComponents = [
    "pay for",
    NSAttributedString(string: "one",
                       attributes: marketingAttributes),
    "and get",
    "three!\n".toAttributed(with: marketingAttributes),
    "Only today!".toAttributed(with: [
        .font: UIFont.systemFont(ofSize: 16.0, weight: .bold),
        .foregroundColor: UIColor.red
    ])
] as [AttributedStringComponent]
let attributedText = NSAttributedString(from: attributedStringComponents, defaultAttributes: defaultAttributes)

সম্পূর্ণ উদাহরণ

সমাধান কোড এখানে পেস্ট করতে ভুলবেন না

import UIKit

class ViewController: UIViewController {

    private weak var label: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()
        let label = UILabel(frame: .init(x: 40, y: 40, width: 300, height: 80))
        label.numberOfLines = 2
        view.addSubview(label)
        self.label = label

        let defaultAttributes = [
            .font: UIFont.systemFont(ofSize: 16, weight: .regular),
            .foregroundColor: UIColor.blue
        ] as [NSAttributedString.Key : Any]

        let marketingAttributes = [
            .font: UIFont.systemFont(ofSize: 20.0, weight: .bold),
            .foregroundColor: UIColor.black
        ] as [NSAttributedString.Key : Any]

        let attributedStringComponents = [
            "pay for",
            NSAttributedString(string: "one",
                               attributes: marketingAttributes),
            "and get",
            "three!\n".toAttributed(with: marketingAttributes),
            "Only today!".toAttributed(with: [
                .font: UIFont.systemFont(ofSize: 16.0, weight: .bold),
                .foregroundColor: UIColor.red
            ])
        ] as [AttributedStringComponent]
        label.attributedText = NSAttributedString(from: attributedStringComponents, defaultAttributes: defaultAttributes)
        label.textAlignment = .center
    }
}

ফলাফল

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


1

আমার তৈরি লাইব্রেরিটি দিয়ে আপনার সমস্যার সমাধান করা সত্যিই সহজ হবে। একে বলা হয় আত্রিবুতিকা।

let calculatedCoffee: Int = 768
let g = Style("g").font(.boldSystemFont(ofSize: 12)).foregroundColor(.red)
let all = Style.font(.systemFont(ofSize: 12))

let str = "\(calculatedCoffee)<g>g</g>".style(tags: g)
    .styleAll(all)
    .attributedString

label.attributedText = str

768g

আপনি এটি এখানে https://github.com/psharanda/Atributika খুঁজে পেতে পারেন



1

সত্যই কোনও কাজ ছাড়াই এটি করার জন্য সুইফটার সুইফটের একটি দুর্দান্ত মিষ্টি উপায় রয়েছে। কেবল সেই প্যাটার্নটি সরবরাহ করুন যা মেলানো উচিত এবং এতে কী কী বৈশিষ্ট্য প্রয়োগ করতে হবে। এগুলি অনেক কিছু যাচাই করে দেখার জন্য তারা দুর্দান্ত।

``` Swift
let defaultGenreText = NSAttributedString(string: "Select Genre - Required")
let redGenreText = defaultGenreText.applying(attributes: [NSAttributedString.Key.foregroundColor : UIColor.red], toRangesMatching: "Required")
``

যদি আপনার একাধিক জায়গা থাকে যেখানে এটি প্রয়োগ করা হবে এবং আপনি কেবলমাত্র এটি নির্দিষ্ট দৃষ্টান্তের জন্য ঘটতে চান তবে এই পদ্ধতিটি কার্যকর হবে না।

আপনি এক ধাপে এটি করতে পারেন, আলাদা হওয়ার পরে পড়া সহজ।


0

সুইফট 4.x

let attr = [NSForegroundColorAttributeName:self.configuration.settingsColor, NSFontAttributeName: self.configuration.settingsFont]

let title = NSAttributedString(string: self.configuration.settingsTitle,
                               attributes: attr)

0

সুইফট 3.0 // বৈশিষ্ট্যযুক্ত স্ট্রিং তৈরি করুন

মত বৈশিষ্ট্য সংজ্ঞায়িত করুন

let attributes = [NSAttributedStringKey.font : UIFont.init(name: "Avenir-Medium", size: 13.0)]


0

সুইফট 5

    let attrStri = NSMutableAttributedString.init(string:"This is red")
    let nsRange = NSString(string: "This is red").range(of: "red", options: String.CompareOptions.caseInsensitive)
    attrStri.addAttributes([NSAttributedString.Key.foregroundColor : UIColor.red, NSAttributedString.Key.font: UIFont.init(name: "PTSans-Regular", size: 15.0) as Any], range: nsRange)
    self.label.attributedText = attrStri

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


-4
extension String {
//MARK: Getting customized string
struct StringAttribute {
    var fontName = "HelveticaNeue-Bold"
    var fontSize: CGFloat?
    var initialIndexOftheText = 0
    var lastIndexOftheText: Int?
    var textColor: UIColor = .black
    var backGroundColor: UIColor = .clear
    var underLineStyle: NSUnderlineStyle = .styleNone
    var textShadow: TextShadow = TextShadow()

    var fontOfText: UIFont {
        if let font = UIFont(name: fontName, size: fontSize!) {
            return font
        } else {
            return UIFont(name: "HelveticaNeue-Bold", size: fontSize!)!
        }
    }

    struct TextShadow {
        var shadowBlurRadius = 0
        var shadowOffsetSize = CGSize(width: 0, height: 0)
        var shadowColor: UIColor = .clear
    }
}
func getFontifiedText(partOfTheStringNeedToConvert partTexts: [StringAttribute]) -> NSAttributedString {
    let fontChangedtext = NSMutableAttributedString(string: self, attributes: [NSFontAttributeName: UIFont(name: "HelveticaNeue-Bold", size: (partTexts.first?.fontSize)!)!])
    for eachPartText in partTexts {
        let lastIndex = eachPartText.lastIndexOftheText ?? self.count
        let attrs = [NSFontAttributeName : eachPartText.fontOfText, NSForegroundColorAttributeName: eachPartText.textColor, NSBackgroundColorAttributeName: eachPartText.backGroundColor, NSUnderlineStyleAttributeName: eachPartText.underLineStyle, NSShadowAttributeName: eachPartText.textShadow ] as [String : Any]
        let range = NSRange(location: eachPartText.initialIndexOftheText, length: lastIndex - eachPartText.initialIndexOftheText)
        fontChangedtext.addAttributes(attrs, range: range)
    }
    return fontChangedtext
}

}

// নীচের মত এটি ব্যবহার করুন

    let someAttributedText = "Some   Text".getFontifiedText(partOfTheStringNeedToConvert: <#T##[String.StringAttribute]#>)

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