आईओएस में firstResponder
लगाने के लिए कोई आसान तरीका नहीं है। उपरोक्त उत्तरों केवल UIView
एस पर नज़र रख रहे हैं लेकिन UIResponder
के सभी उप-वर्ग जैसे UIViewController
पहले उत्तरदाता हो सकते हैं।
के अनुसार UIResponder
की Quick Help
:
कई प्रमुख वस्तुओं भी UIApplication वस्तु, UIViewController पर वस्तुओं, और सभी UIView वस्तुओं (जो UIWindow भी शामिल है) सहित प्रतिसाद, कर रहे हैं। जैसे-जैसे ईवेंट होते हैं, UIKit उन्हें आपके ऐप के प्रतिसादकर्ता ऑब्जेक्ट्स को संभालने के लिए भेजता है।
और एक ही रास्ता UIResponder
श्रृंखला का पालन करने का उपयोग कर UIResponder
के next: UIResponder
संपत्ति हो जाएगा।
उत्तरदाता श्रृंखला में अगला उत्तरदाता लौटाता है, या शून्य अगर कोई अगला उत्तरदाता नहीं है। यूआईआरस्पेन्डर क्लास स्वचालित रूप से को अगले प्रतिसादकर्ता को स्टोर या सेट नहीं करता है, इसलिए यह विधि डिफ़ॉल्ट रूप से शून्य हो जाती है। सबक्लास को इस विधि को ओवरराइड करना होगा और अगले उत्तरदाता को उचित रूप से वापस करना होगा। उदाहरण के लिए, UIView इस विधि को लागू करता है और UIViewController ऑब्जेक्ट देता है जो इसे प्रबंधित करता है (यदि इसमें कोई है) या इसके पर्यवेक्षण (यदि ऐसा नहीं है)। UIViewController समान रूप से विधि लागू करता है और इसके दृश्य का पर्यवेक्षण देता है। UIWindow एप्लिकेशन ऑब्जेक्ट देता है। यूआईपीप्लिकेशन शून्य वापस आता है।
सबसे UIKit
वस्तु में superview
, UIViewController
, UIWindow
, UIApplication
या Appdelegate
next
UIResponder
हो जाएगा।
extension UIResponder {
func findFirstResponder() -> UIResponder? {
var responder: UIResponder? = self
while responder != nil {
guard let r = responder, r.isFirstResponder() else {
responder = responder?.next
continue
}
return r
}
return nil
}
}
हालांकि इसके बाद के संस्करण responder
के भाई बहन को ट्रैक नहीं करता। मुझे लगता है कि यदि आप वास्तव में उन सभी को ट्रैक करना चाहते हैं, तो आपको उत्तरदाता के प्रकार की जांच करने और अपने बच्चे को ट्रैक करने की आवश्यकता है (सबव्यू, बाल दृश्य नियंत्रक)।
तालिका में आपके पास कितने टेक्स्टफिल्ड्स हैं? –
वे गतिशील रूप से बनाए गए हैं लेकिन मुझे अभी एक रास्ता मिला है – Armand
यह जानकर खुशी हुई कि, इसे उत्तर के रूप में पोस्ट करें। :) –