সুইফ্টের সাথে বিশিষ্ট পাঠ্যে ট্যাপগুলি সনাক্ত করা
কখনও কখনও নতুনদের জন্য কীভাবে জিনিসগুলি সেট আপ করা যায় তা জানার জন্য কিছুটা কঠিন (এটি যাইহোক আমার পক্ষে ছিল), তাই এই উদাহরণটি একটু পরিপূর্ণ।
UITextView
আপনার প্রকল্পে একটি যুক্ত করুন ।
নালী
নামের সাথে একটি আউটলেট দিয়ে UITextView
এর ViewController
সাথে সংযুক্ত করুন textView
।
কাস্টম বৈশিষ্ট্য
আমরা একটি এক্সটেনশন করে একটি কাস্টম অ্যাট্রিবিউট তৈরি করতে যাচ্ছি ।
দ্রষ্টব্য: এই পদক্ষেপটি প্রযুক্তিগতভাবে alচ্ছিক, তবে আপনি যদি এটি না করেন তবে আপনার একটি স্ট্যান্ডার্ড বৈশিষ্ট্য পছন্দ হিসাবে পরবর্তী অংশে কোডটি সম্পাদনা করতে হবে NSAttributedString.Key.foregroundColor
। একটি কাস্টম অ্যাট্রিবিউট ব্যবহার করার সুবিধা হ'ল বৈশিষ্ট্যযুক্ত পাঠ্য সীমাতে আপনি কোন মানগুলি সংরক্ষণ করতে চান তা আপনি নির্ধারণ করতে পারেন।
ফাইল> নতুন> ফাইল ...> আইওএস> উত্স> সুইফট ফাইল সহ একটি নতুন সুইফ্ট ফাইল যুক্ত করুন । আপনি যা বলতে চান এটি কল করতে পারেন। আমি আমার এনএসএট্রিবিউটেড স্ট্রিংকি + কাস্টমঅ্যাট্রিবিউট.সুইফ্ট কল করছি ।
নিম্নলিখিত কোডে আটকান:
import Foundation
extension NSAttributedString.Key {
static let myAttributeName = NSAttributedString.Key(rawValue: "MyCustomAttribute")
}
কোড
নিম্নলিখিতটি দিয়ে কোডটি ViewController.swift এ প্রতিস্থাপন করুন। নোট করুন UIGestureRecognizerDelegate
।
import UIKit
class ViewController: UIViewController, UIGestureRecognizerDelegate {
@IBOutlet weak var textView: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
// Create an attributed string
let myString = NSMutableAttributedString(string: "Swift attributed text")
// Set an attribute on part of the string
let myRange = NSRange(location: 0, length: 5) // range of "Swift"
let myCustomAttribute = [ NSAttributedString.Key.myAttributeName: "some value"]
myString.addAttributes(myCustomAttribute, range: myRange)
textView.attributedText = myString
// Add tap gesture recognizer to Text View
let tap = UITapGestureRecognizer(target: self, action: #selector(myMethodToHandleTap(_:)))
tap.delegate = self
textView.addGestureRecognizer(tap)
}
@objc func myMethodToHandleTap(_ sender: UITapGestureRecognizer) {
let myTextView = sender.view as! UITextView
let layoutManager = myTextView.layoutManager
// location of tap in myTextView coordinates and taking the inset into account
var location = sender.location(in: myTextView)
location.x -= myTextView.textContainerInset.left;
location.y -= myTextView.textContainerInset.top;
// character index at tap location
let characterIndex = layoutManager.characterIndex(for: location, in: myTextView.textContainer, fractionOfDistanceBetweenInsertionPoints: nil)
// if index is valid then do something.
if characterIndex < myTextView.textStorage.length {
// print the character index
print("character index: \(characterIndex)")
// print the character at the index
let myRange = NSRange(location: characterIndex, length: 1)
let substring = (myTextView.attributedText.string as NSString).substring(with: myRange)
print("character at index: \(substring)")
// check if the tap location has a certain attribute
let attributeName = NSAttributedString.Key.myAttributeName
let attributeValue = myTextView.attributedText?.attribute(attributeName, at: characterIndex, effectiveRange: nil)
if let value = attributeValue {
print("You tapped on \(attributeName.rawValue) and the value is: \(value)")
}
}
}
}
এখন আপনি যদি "সুইফ্ট" এর "ডাব্লু" তে ট্যাপ করেন তবে আপনার নিম্নলিখিত ফলাফলটি পাওয়া উচিত:
character index: 1
character at index: w
You tapped on MyCustomAttribute and the value is: some value
মন্তব্য
- এখানে আমি একটি কাস্টম বৈশিষ্ট্য ব্যবহার করেছি, তবে এটির মতো সহজেই
NSAttributedString.Key.foregroundColor
(পাঠ্যের রঙ) থাকতে পারে যার মান রয়েছে UIColor.green
।
- পূর্বে পাঠ্য দর্শনটি সম্পাদনাযোগ্য বা নির্বাচনের যোগ্য হতে পারে না, তবে সুইফট ৪.২-এর জন্য আমার আপডেট করা উত্তরে এটি নির্বাচিত কিনা তা নির্বিশেষে এটি ঠিকঠাক কাজ করছে বলে মনে হচ্ছে।
আরও অধ্যয়ন
এই উত্তরটি এই প্রশ্নের বেশ কয়েকটি অন্যান্য উত্তরের ভিত্তিতে ছিল। এগুলি ছাড়াও, আরও দেখুন