হালনাগাদ:
আমার প্রশ্নের 2 টি মূল অংশ ছিল:
- ক্লিকযোগ্যযোগ্য লিঙ্কটির জন্য প্রদর্শিত পাঠ্যটি যে অনুরোধ করা হয়েছে তার প্রকৃত লিঙ্কের চেয়ে আলাদা যেখানে কীভাবে একটি লিঙ্ক তৈরি করবেন:
- পাঠ্যে বৈশিষ্ট্যগুলি সেট করতে কাস্টম কোড ব্যবহার না করে কীভাবে লিঙ্কগুলি সেট আপ করবেন।
দেখা যাচ্ছে যে আইওএস 7 এর থেকে বিশিষ্ট পাঠ্য লোড করার ক্ষমতা যুক্ত করেছে NSData
।
আমি এর একটি কাস্টম সাবক্লাস তৈরি করেছি UITextView
যা @IBInspectable
বৈশিষ্ট্যের সুবিধা নিয়ে যায় এবং আপনাকে আইবিতে কোনও আরটিএফ ফাইল থেকে সামগ্রী লোড করতে দেয়। আপনি কেবল ফাইল নাম আইবিতে টাইপ করুন এবং কাস্টম ক্লাসটি বাকীটি করে।
বিশদটি এখানে:
আইওএস 7 এ, NSAttributedString
পদ্ধতিটি অর্জন করেছে initWithData:options:documentAttributes:error:
। এই পদ্ধতিটি আপনাকে একটি এনএসডিটা অবজেক্ট থেকে একটি এনএসএট্রিবিউটেড স্ট্রিং লোড করতে দেয়। আপনি প্রথমে একটি আরটিএফ ফাইলটি এনএসডিটাতে initWithData:options:documentAttributes:error:
লোড করতে পারেন, তারপরে সেই এনএসডিটা আপনার পাঠ্য দৃশ্যে লোড করতে ব্যবহার করুন । (মনে রাখবেন যে এমন একটি পদ্ধতি রয়েছে initWithFileURL:options:documentAttributes:error:
যা সরাসরি কোনও ফাইল থেকে কোনও গুণিত স্ট্রিং লোড করতে পারে, তবে সেই পদ্ধতিটি আইওএস dep-এ অবহেলা করা হয়েছিল the পদ্ধতিটি ব্যবহার করা আরও নিরাপদ initWithData:options:documentAttributes:error:
, যা অবহেলা করা হয়নি)।
আমি এমন একটি পদ্ধতি চেয়েছিলাম যা আমার ব্যবহারযোগ্য লিঙ্কগুলির সাথে নির্দিষ্ট কোনও কোড তৈরি না করেই আমার পাঠ্য দর্শনে ক্লিকযোগ্য লিঙ্কগুলি ইনস্টল করতে দেয়।
সমাধান আমি নিয়ে এসেছেন UITextView আমি কলের একটি কাস্টম উপশ্রেণী তৈরি করতে ছিল RTF_UITextView
এবং এটি একটি দিতে @IBInspectable
সম্পত্তি নামক RTF_Filename
। কোনও @IBInspectable
বৈশিষ্ট্যে বৈশিষ্ট্য যুক্ত করার কারণে ইন্টারফেস বিল্ডার "বৈশিষ্ট্য পরিদর্শক" এ সেই সম্পত্তিটি প্রকাশ করে। তারপরে আপনি কাস্টম কোডটি আইবি থেকে মানটি সেট করতে পারেন।
আমি @IBDesignable
আমার কাস্টম ক্লাসে একটি বৈশিষ্ট্যও যুক্ত করেছি। @IBDesignable
অ্যাট্রিবিউট Xcode বলে যে এটা ইন্টারফেস রচয়িতা মধ্যে আপনার কাস্টম দৃশ্য ক্লাসের একটি চলমান কপি ইনস্টল করা উচিত তাই আপনি এটি আপনার ভিউ অনুক্রমের গ্রাফিকাল প্রদর্শনে দেখতে পারেন। () দুর্ভাগ্যক্রমে, এই শ্রেণীর জন্য, @IBDesignable
সম্পত্তিটি ফ্ল্যাশ বলে মনে হচ্ছে। এটি প্রথম যুক্ত করার পরে এটি কার্যকর হয়েছিল, তবে তারপরে আমি আমার পাঠ্য দৃশ্যের সরল পাঠ্য সামগ্রীগুলি মুছলাম এবং আমার দৃশ্যে ক্লিকযোগ্য লিঙ্কগুলি চলে গেল এবং আমি সেগুলি ফিরে পেতে সক্ষম হইনি))
আমার জন্য কোড RTF_UITextView
খুব সহজ। যোগ করা ছাড়াও @IBDesignable
অ্যাট্রিবিউটে একটি RTF_Filename
সঙ্গে সম্পত্তি @IBInspectable
অ্যাট্রিবিউট, আমি একটি যোগ didSet()
করার পদ্ধতি RTF_Filename
সম্পত্তি। didSet()
পদ্ধতি মান যে কোনো সময় বলা পরার RTF_Filename
সম্পত্তি পরিবর্তন। didSet()
পদ্ধতির কোডটি বেশ সহজ:
@IBDesignable
class RTF_UITextView: UITextView
{
@IBInspectable
var RTF_Filename: String?
{
didSet(newValue)
{
//If the RTF_Filename is nil or the empty string, don't do anything
if ((RTF_Filename ?? "").isEmpty)
{
return
}
//Use optional binding to try to get an URL to the
//specified filename in the app bundle. If that succeeds, try to load
//NSData from the file.
if let fileURL = NSBundle.mainBundle().URLForResource(RTF_Filename, withExtension: "rtf"),
//If the fileURL loads, also try to load NSData from the URL.
let theData = NSData(contentsOfURL: fileURL)
{
var aString:NSAttributedString
do
{
//Try to load an NSAttributedString from the data
try
aString = NSAttributedString(data: theData,
options: [:],
documentAttributes: nil
)
//If it succeeds, install the attributed string into the field.
self.attributedText = aString;
}
catch
{
print("Nerp.");
}
}
}
}
}
মনে রাখবেন যে যদি @ আইবিডিজাইনেবল সম্পত্তি আপনার স্টাইলযুক্ত পাঠ্যটি ইন্টারফেস বিল্ডারে নির্ভরযোগ্যভাবে মঞ্জুরি দেয় না তবে উপরের কোডটি কাস্টম সাবক্লাসের পরিবর্তে ইউআইটিেক্সটভিউয়ের এক্সটেনশন হিসাবে সেট করা ভাল। আপনি কাস্টম ক্লাসে পাঠ্য দর্শন পরিবর্তন না করে যে কোনও পাঠ্য দৃশ্যে এটিকে ব্যবহার করতে পারেন।
আইওএস 7 এর পূর্বে আপনার যদি আইওএস সংস্করণগুলি সমর্থন করার দরকার হয় তবে আমার অন্য উত্তরটি দেখুন।
আপনি একটি নমুনা প্রকল্প ডাউনলোড করতে পারেন যা এই নতুন ক্লাসটি গিটহাব থেকে অন্তর্ভুক্ত করেছে:
DatesInSwift ডেমো প্রকল্পের GitHub থেকে