2010-04-10 6 views
10

मैं आईफोन उत्तरदाता श्रृंखला के बारे में उलझन में हूं।आईफोन पहले उत्तरदाताओं

पहले प्रत्युत्तर एक आवेदन (आमतौर पर एक UIView वस्तु) में प्रत्युत्तर वस्तु है कि स्पर्श घटनाओं के अलावा अन्य घटनाओं के पहले प्राप्तकर्ता होने के लिए नामित किया गया है: विशेष रूप से, iPhone घटना से निपटने गाइड http://developer.apple.com/iPhone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/EventHandling/EventHandling.html में, हम निम्नलिखित है ।

लेकिन यूआईवीव यूआईआरएसस्पोन्डर का उप-वर्ग है। और UIResponder वर्ग संदर्भ यह कहते हैं:

- (BOOL)canBecomeFirstResponder 

वापसी मूल्य

हाँ रिसीवर पहले प्रत्युत्तर बन सकता है, तो कोई अन्यथा। चर्चा

डिफ़ॉल्ट रूप से कोई नहीं देता है। यदि कोई उत्तरदाता ऑब्जेक्ट इस विधि से YES देता है, तो यह पहला प्रतिसादकर्ता बन जाता है और स्पर्श ईवेंट और क्रिया संदेश प्राप्त कर सकता है। सबक्लास को इस विधि को ओवरराइड करना होगा ताकि वह पहले उत्तरदाता बन सके।

मैं स्पष्ट विरोधाभास से उलझन में हूं। क्या कोई इसे मेरे लिए साफ़ कर सकता है?

इसके लायक होने के लिए, मैंने एक साधारण दृश्य-आधारित एप्लिकेशन स्थापित किया है, और कॉल कर सकते हैं बेस्ट रिस्पॉन्डर और isFirstResponder इसके विचार पर। दोनों ने वापस नहीं किया।

उत्तर

9

इसका मतलब क्या है कि बुनियादी UIView पहले प्रत्युत्तर बनने के लिए सक्षम नहीं है है - यह गति घटनाओं के साथ कुछ भी कर नहीं है, संपादन-मेनू संदेश, आदि

कुछ UIView उपवर्गों (UITextView की तरह) में सक्षम हैं पहले उत्तरदाता बनने के लिए, और आप अपना स्वयं का UIView सबक्लास लिख सकते हैं जो ऐसा भी करता है।

16

नामकरण भ्रमित हो सकता है। "पहले उत्तरदाता" के बजाय इसे "प्रारंभिक घटना लक्ष्य" के रूप में सोचें यानी ऑब्जेक्ट जो पहला उत्तरदाता है, सभी घटनाओं के लिए प्रारंभिक लक्ष्य बन जाता है। कुछ एपीआई में इसे "फोकस" भी कहा जाता है हालांकि ऐप्पल एपीआई में आमतौर पर विंडोज़ का वर्णन करने के लिए आरक्षित होता है।

किसी भी समय, ऐप में केवल एक पहला उत्तरदाता/अंतर-घटना-लक्ष्य है। केवल व्यक्तिगत वस्तुएं/उदाहरण पहले-प्रतिक्रियाकर्ता/आंत-घटना-लक्ष्य बन सकते हैं। कक्षाएं केवल परिभाषित कर सकती हैं कि उनके उदाहरण में पहले-उत्तरदाता/अंतर-घटना-लक्ष्य बनने की क्षमता है या नहीं। एक कक्षा को केवल ऐप के पहले-उत्तरदाता/इंटियल-इवेंट-लक्ष्य बनने की क्षमता प्रदान करने की आवश्यकता होती है, यदि ऐसा करने में कोई अर्थ हो। उदाहरण के लिए, एक टेक्स्टफील्ड को स्पष्ट रूप से घटनाओं को फँसाने की क्षमता की आवश्यकता होती है ताकि वह उन घटनाओं को स्वयं संपादित करने के लिए उपयोग कर सके। इसके विपरीत, एक स्थिर लेबल को ऐसी कोई क्षमता की आवश्यकता नहीं होती है।

क्या एनएसआरसॉन्डर से प्राप्त एक विशेष वर्ग को इस बात पर कोई असर नहीं पड़ता है कि वर्ग (या कक्षा का एक विशिष्ट उदाहरण) स्वयं को पहले उत्तरदाता/अंतर-घटना-लक्ष्य के रूप में सेट करने देगा। यह क्षमता पूरी तरह से canBecomeFirstResponder संदेश के उदाहरणों की प्रतिक्रिया से आता है। वही उदाहरण शर्तों के एक सेट के तहत पहला उत्तरदाता/अंतर-घटना-लक्ष्य होने से इंकार कर सकता है और फिर शर्तों को बदलने के बाद इसे बाद में अनुमति देता है। यदि वे चाहें तो कक्षाएं निश्चित रूप से स्थिति को कड़ी मेहनत कर सकती हैं।

दूसरे शब्दों में, पहले-उत्तरदाता/अंतर-घटना-लक्ष्य किसी विशेष समय पर किसी विशेष उदाहरण की स्थिति है। पहला उत्तरदाता/इंटियल-इवेंट-लक्ष्य एक गर्म आलू या टोकन की तरह है जो यूआई में उदाहरण से उदाहरण के लिए दिया जाता है। कुछ वर्ग गर्म आलू को पकड़ने से इनकार करते हैं। कुछ हमेशा करते हैं और दूसरों को कभी-कभी इसे पकड़ते हैं और दूसरों को अनदेखा करते हैं।