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 एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें