First Responder হল iOS-এ UIResponder অবজেক্ট যা প্রথমে টাচ ইভেন্ট, কী প্রেস, শেক জেসচার এবং মেনু কমান্ড গ্রহণ করে। যেকোনো মুহূর্তে, অ্যাপ্লিকেশনে শুধুমাত্র একটি অবজেক্ট first responder হতে পারে। নিয়োগ স্বয়ংক্রিয়ভাবে ঘটে (UITextField ফোকাস পেলে) বা প্রোগ্রামগতভাবে becomeFirstResponder মেথডের মাধ্যমে। Apple Developer Documentation (2026) অনুযায়ী, একটি অবজেক্ট first responder হতে পারে শুধুমাত্র যদি তার canBecomeFirstResponder মেথড true রিটার্ন করে, যা এই মেকানিজমকে স্পষ্ট এবং নিয়ন্ত্রণযোগ্য করে তোলে।
মূল বিষয়
First Responder হল সেই UIResponder অবজেক্ট যা বর্তমানে একটি iOS অ্যাপ্লিকেশনে ইনপুট ইভেন্ট গ্রহণ করে। সিস্টেম সমস্ত টাচ ইভেন্ট, কী প্রেস, মোশন ইভেন্ট (ডিভাইস শেকিং) এবং অ্যাকশন বার্তা (যেমন কনটেক্সট মেনু কল করা) এই অবজেক্টে পাঠায়।
First responder ধারণাটি Responder Chain-এর প্রথম লিঙ্ক। যদি first responder প্রাপ্ত ইভেন্টটি হ্যান্ডেল না করে, তবে এটি স্বয়ংক্রিয়ভাবে চেইনের পরবর্তী অবজেক্টে পাস হয়। এটি নিশ্চিত করে যে ইভেন্টটি হারিয়ে না যায়, বরং অনুক্রমিকভাবে শ্রেণিবিন্যাসের সমস্ত সম্ভাব্য হ্যান্ডলারকে অফার করা হয়।
Apple-এর মতে, first responder অবস্থা UIResponder এবং এর canBecomeFirstResponder ও becomeFirstResponder মেথডের সাথে ঘনিষ্ঠভাবে সম্পর্কিত। ডিফল্টভাবে, UIView শুধুমাত্র নির্দিষ্ট সাবক্লাসের জন্য true রিটার্ন করে — UITextField, UITextView, UISearchBar। অন্যান্য ভিউ, সাধারণ UIView সহ, false রিটার্ন করে, যা আকস্মিক নিয়োগ প্রতিরোধ করে।
নিয়োগ দুটি উপায়ে ঘটতে পারে: স্বয়ংক্রিয়ভাবে, যখন ব্যবহারকারী UITextField স্পর্শ করে (সিস্টেম অভ্যন্তরীণভাবে becomeFirstResponder কল করে), বা প্রোগ্রামগতভাবে, যখন ডেভেলপার স্পষ্টভাবে যেকোনো UIResponder অবজেক্টে becomeFirstResponder মেথড কল করে।
নিয়োগের আগে, iOS canBecomeFirstResponder পরীক্ষা করে। যদি মেথডটি false রিটার্ন করে, becomeFirstResponder কল উপেক্ষা করা হয় এবং অবজেক্টটি first responder হয় না। এটি একটি প্রতিরক্ষামূলক ব্যবস্থা যা ইভেন্ট হ্যান্ডেল করার জন্য প্রস্তুত নয় এমন অবজেক্ট নিয়োগে বাধা দেয় — উদাহরণস্বরূপ, লুকানো বা নিষ্ক্রিয় ইন্টারফেস উপাদান।
class CustomTextField: UITextField {
override var canBecomeFirstResponder: Bool {
return super.canBecomeFirstResponder
}
}
// প্রোগ্রামগত নিয়োগ
textField.becomeFirstResponder()
// পরীক্ষা করুন যে first responder কিনা
if textField.isFirstResponder {
print("TextField এখন first responder")
}
যখন একটি নতুন first responder নিযুক্ত হয়, iOS স্বয়ংক্রিয়ভাবে পূর্ববর্তীটিতে resignFirstResponder কল করে। এটি নিশ্চিত করে যে সিস্টেমে সর্বদা শুধুমাত্র একটি অবজেক্ট first responder অবস্থায় থাকে। যদি নতুন অবজেক্ট first responder হতে না পারে (canBecomeFirstResponder = false), পুরাতনটি তার অবস্থা ধরে রাখে।
iOS কীবোর্ড first responder মেকানিজমের কারণেই স্ক্রিনে উপস্থিত হয়। যখন UITextField বা UITextView first responder হয়, সিস্টেম স্বয়ংক্রিয়ভাবে সেই ফিল্ডের বর্তমান keyboardType-এর সাথে সম্পর্কিত কীবোর্ড প্রদর্শন করে। যখন first responder resign করে, কীবোর্ড লুকিয়ে যায়।
এই আচরণটি iOS-এ একটি মূল UX ব্যবস্থা: ব্যবহারকারী একটি ইনপুট ফিল্ড স্পর্শ করে — কীবোর্ড দেখা যায়; Return চাপে বা অন্য ফিল্ড স্পর্শ করে — কীবোর্ড পরিবর্তিত বা লুকিয়ে যায়। ডেভেলপার UIResponder মেথডের মাধ্যমে, পাশাপাশি inputView এবং inputAccessoryView-এর মাধ্যমে স্ট্যান্ডার্ড কীবোর্ড কাস্টম দিয়ে প্রতিস্থাপন করতে এটি নিয়ন্ত্রণ করতে পারেন।
Input Accessory View হল কীবোর্ডের উপরে একটি অতিরিক্ত প্যানেল যা first responder-এর সাথেও সংযুক্ত। উদাহরণস্বরূপ, ইনপুট ফিল্ডের মধ্যে নেভিগেশনের জন্য Next, Previous, Done বাটন সহ একটি প্যানেল। এটি কীবোর্ডের সাথে দেখা এবং লুকিয়ে যায়, first responder অবস্থার সাথে সিঙ্ক্রোনাইজ হয়।
| ঘটনা | First Responder অবস্থা | কীবোর্ড |
|---|---|---|
| UITextField স্পর্শ করা | First responder হয় | দেখা যায় |
| Return চাপা | থাকে বা resign করে | থাকে বা লুকিয়ে যায় |
| অন্য ফিল্ড স্পর্শ করা | নতুন ফিল্ডে স্থানান্তরিত হয় | পরিবর্তিত হয় |
| resignFirstResponder কল করা | সরিয়ে ফেলা হয় | লুকিয়ে যায় |
| অ্যাপ্লিকেশন লুকানো | স্বয়ংক্রিয়ভাবে resign করে | লুকিয়ে যায় |
ResignFirstResponder হল UIResponder-এর একটি মেথড যা একটি অবজেক্ট থেকে first responder অবস্থা সরিয়ে দেয়। কলের পরে, অবজেক্টটি ইনপুট ইভেন্ট গ্রহণ বন্ধ করে দেয় এবং কীবোর্ড (যদি সক্রিয় ছিল) লুকিয়ে যায়। মেথডটি একটি Bool রিটার্ন করে — true যদি resign সফল হয়।
ডেভেলপাররা প্রায়ই Done বাটন চাপার, স্ক্রিনের খালি জায়গা স্পর্শ করার (view.endEditing), বা স্ক্রিন থেকে বেরিয়ে যাওয়ার সময় resignFirstResponder কল করে। view.endEditing(true) হল একসাথে সমস্ত চাইল্ড টেক্সট ফিল্ডের জন্য resign করার একটি সুবিধাজনক উপায়: এটি সম্পূর্ণ ভিউ শ্রেণিবিন্যাস ট্রাভার্স করে এবং বর্তমান first responder-এ resignFirstResponder কল করে।
// Done বাটন চাপলে resign
@objc func doneButtonTapped() {
textField.resignFirstResponder()
}
// খালি স্থান স্পর্শে resign
override func touchesBegan(
_ touches: Set<UITouch>,
with event: UIEvent?
) {
view.endEditing(true)
}
// সকল ফর্ম ফিল্ডের জন্য resign
func validateAndSubmit() {
view.endEditing(true)
// ফর্ম জমা লজিক
}
এমন পরিস্থিতি রয়েছে যেখানে resignFirstResponder false রিটার্ন করতে পারে। এটি ঘটে যদি অবজেক্টটি মেথডটি ওভাররাইড করে এবং স্পষ্টভাবে অবস্থা অপসারণ নিষিদ্ধ করে। উদাহরণস্বরূপ, বৈধতা প্রক্রিয়াধীন একটি টেক্সট ফিল্ড ডেটা ক্ষতি রোধ করতে অস্থায়ীভাবে resign ব্লক করতে পারে। এই ধরনের ক্ষেত্রে, বৈধতা সম্পূর্ণ হওয়ার জন্য অপেক্ষা করুন এবং তারপর জোর করে resign করুন।
UIResponder isFirstResponder প্রপার্টি (শুধু পঠনযোগ্য) প্রদান করে, যা true রিটার্ন করে যদি প্রদত্ত অবজেক্টটি বর্তমানে first responder হয়। এটি শর্তসাপেক্ষ যুক্তির জন্য দরকারী — উদাহরণস্বরূপ, যদি একটি টেক্সট ফিল্ড ফোকাসে থাকে এবং ব্যবহারকারী ডেটা প্রবেশ করাচ্ছে তবে একটি কাজ করা এড়াতে।
iOS অ্যাপ্লিকেশন-ব্যাপী স্কেলে বর্তমান first responder পাওয়ার জন্য কোনো বিল্ট-ইন API প্রদান করে না। ডেভেলপাররা UIResponder মেথড ব্যবহার করে ভিউ শ্রেণিবিন্যাস ট্রাভার্স করে এটি অর্জন করে। Apple first responder-এর একটি দুর্বল রেফারেন্স (weak reference) সুপারিশ করে, যা KVO বা ডেলিগেটের মাধ্যমে আপডেট করা যেতে পারে।
// First responder খোঁজার এক্সটেনশন
extension UIView {
var firstResponder: UIResponder? {
guard isFirstResponder else {
return subviews.compactMap { $0.firstResponder }.first
}
return self
}
}
// ব্যবহার
if let current = view.firstResponder {
print("Current first responder: \(current)")
}
পরিবর্তন ট্র্যাক করার জন্য, আপনি UIResponder.keyboardWillShowNotification এবং UIResponder.keyboardWillHideNotification-এ সাবস্ক্রাইব করতে পারেন — তারা পরোক্ষভাবে নির্দেশ করে যে কোনো টেক্সট অবজেক্ট first responder হয়েছে বা হওয়া বন্ধ করেছে। তবে, isFirstResponder পরিবর্তনের জন্য কোনো সরাসরি সাবস্ক্রিপশন নেই; এর জন্য KVO বা কাস্টম ডেলিগেট ব্যবহার করা হয়।
কাস্টম ভিউ first responder হতে পারে যদি তারা canBecomeFirstResponder ওভাররাইড করে true রিটার্ন করে। এটি এমন উপাদানগুলির জন্য প্রয়োজনীয় যেগুলিকে কীবোর্ড বা শারীরিক বাটন ইভেন্ট গ্রহণ করতে হবে — যেমন কাস্টম গেম কন্ট্রোলার বা UITextView-ভিত্তিক কোড এডিটর।
কাস্টম first responder তৈরি করার সময়, অ্যাক্সেসিবিলিটি মনে রাখা গুরুত্বপূর্ণ: VoiceOver এবং Switch Control নেভিগেশনের জন্য সঠিক first responder নিয়োগের উপর নির্ভর করে। যদি একটি কাস্টম ভিউ first responder হয়, তবে এটি সঠিকভাবে UIAccessibility প্রোটোকল বাস্তবায়ন করতে হবে এবং সহায়ক প্রযুক্তিগুলিকে তার অবস্থা জানাতে হবে।
কাস্টম ইনপুট-এর জন্য (যেমন বারকোড স্ক্যানার বা ডিজিটাল কিপ্যাড), inputView প্রপার্টি ওভাররাইড করুন — একটি কাস্টম UIView রিটার্ন করুন যা স্ট্যান্ডার্ড কীবোর্ডের পরিবর্তে প্রদর্শিত হবে যখন এই ভিউটি first responder হয়। একইভাবে, inputAccessoryView কীবোর্ডের উপরে একটি প্যানেল যোগ করে।
সচরাচর জিজ্ঞাসা
First Responder হল UIResponder অবজেক্ট যা বর্তমানে ইনপুট ইভেন্ট (টাচ, কী, এক্সেলেরোমিটার) গ্রহণ করে। এটি becomeFirstResponder-এর মাধ্যমে নিযুক্ত হয় এবং canBecomeFirstResponder থেকে true রিটার্ন করতে হবে। একটি অ্যাপ্লিকেশনে শুধুমাত্র একটি অবজেক্ট first responder হতে পারে।
প্রোগ্রামগতভাবে textField.becomeFirstResponder() কল করুন, উদাহরণস্বরূপ, viewDidAppear-এ। নিশ্চিত করুন যে textField লুকানো নেই, userInteractionEnabled = true, এবং isEnabled = true। যদি ফিল্ডটি UITableView বা UICollectionView-এর ভিতরে থাকে, তবে নিশ্চিত করুন যে সেলটি স্ক্রিনে দৃশ্যমান।
মূল ভিউতে একটি UITapGestureRecognizer যোগ করুন এবং এর হ্যান্ডলারে view.endEditing(true) কল করুন। এটি স্বয়ংক্রিয়ভাবে বর্তমান first responder খুঁজে পাবে এবং resignFirstResponder কল করবে। বিকল্পভাবে, UIViewController-এ touchesBegan ওভাররাইড করে endEditing কল করুন।
becomeFirstResponder false রিটার্ন করে যদি canBecomeFirstResponder false রিটার্ন করে, ভিউ লুকানো থাকে, উইন্ডো শ্রেণিবিন্যাসে না থাকে, বা userInteractionEnabled = false থাকে। এছাড়াও পরীক্ষা করুন যে ভিউটি উইন্ডোতে যোগ করা হয়েছে — স্ক্রিনে নেই এমন একটি ভিউ becomeFirstResponder-এ সাড়া দেবে না।
iOS এর জন্য কোনো গ্লোবাল API প্রদান করে না। একটি ভিউ শ্রেণিবিন্যাস-এর পুনরাবৃত্তিমূলক ট্রাভার্সাল ব্যবহার করুন UIView এক্সটেনশনের মাধ্যমে যা প্রতিটি subview-এ isFirstResponder পরীক্ষা করে। বিকল্প — AppDelegate-এ শেষ first responder-এর একটি দুর্বল রেফারেন্স সংরক্ষণ করুন এবং UITextField ডেলিগেটের মাধ্যমে এটি আপডেট করুন।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন