ऐप्पल वास्तव में मजाकिया है। मेरा मतलब है, वे कहते हैं कि यह काम करता है:उत्तरदाता श्रृंखला में अगले उत्तरदाता को किसी ईवेंट को पास करने की चाल क्या है?
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch* touch = [touches anyObject];
NSUInteger numTaps = [touch tapCount];
if (numTaps < 2) {
[self.nextResponder touchesBegan:touches withEvent:event];
} else {
[self handleDoubleTap:touch];
}
}
मेरे पास एक व्यू कंट्रोलर है। जैसा कि आप जानते हैं, यूआईआरएसस्पोन्डर से कंट्रोलर का वारिस देखें। वह व्यू कंट्रोलर एक MyView ऑब्जेक्ट बनाता है जो UIView से प्राप्त होता है, और इसे अपने स्वयं के दृश्य में एक सबव्यूव के रूप में जोड़ता है।
तो हमने:
देखें नियंत्रक> एक दृश्य (स्वतः)> एक MyView (जो एक UIView है) है।
अब माईव्यू के अंदर मैंने उस कोड को एनएसएलओजी के साथ ऊपर रखा है जो प्रिंट करता है "मेरा व्यू छुआ"। लेकिन मैं उपरोक्त की तरह, अगले उत्तरदाता को घटना को अग्रेषित करता हूं। और व्यू कंट्रोलर के अंदर मेरे पास एक और स्पर्श है, जो कि एक एनएसएलओजी ला ला "स्पर्श दृश्य नियंत्रक" प्रिंट करता है।
अब अनुमान लगाएं: जब मैं MyView को स्पर्श करता हूं, तो यह "MyView को छुआ" प्रिंट करता है। जब मैं MyView के बाहर स्पर्श करता हूं, जो वीसी का दृश्य है, तो मुझे "स्पर्श दृश्य नियंत्रक" मिलता है। तो दोनों काम करते हैं! लेकिन काम नहीं करता है घटना को अग्रेषित कर रहा है। क्योंकि अब, वास्तव में अगला उत्तरदाता दृश्य नियंत्रक होना चाहिए, क्योंकि इसमें कुछ भी नहीं है। लेकिन वीसी की इवेंट हैंडलिंग विधि को कभी भी कॉल नहीं किया जाता है जब मैं इसे अग्रेषित करता हूं।
% $ &! § !!
विचार?
अजीब सामान MyView का अगला उत्तरदाता व्यू कंट्रोलर का दृश्य है। यह समझ में आता है, क्योंकि MyView उस का एक सबूत है। लेकिन मैंने दृश्य नियंत्रक से इस UIView को संशोधित नहीं किया। यह कुछ भी कस्टम नहीं है। और यह किसी भी टच इवेंट हैंडलिंग को लागू नहीं करता है। संदेश नियंत्रक को संदेश पास नहीं होना चाहिए? मैं इसे कैसे पास कर सकता हूं? यदि मैं MyView में ईवेंट हैंडलिंग कोड को हटा देता हूं, तो ईवेंट दृश्य नियंत्रक में अच्छी तरह से आता है।
धन्यवाद eJames। MyView मुझे बताता है कि अगला उत्तरदाता दृश्य नियंत्रक का बिल्कुल सही दृश्य है। मेमोरी एड्रेस सही मिलान करता है। हालांकि, यह स्पर्श बेगन नहीं कहा जाएगा। लेकिन अब मैं देखता हूं कि इस विधि को व्यू कंट्रोलर के दृश्य पर बुलाया जाएगा, लेकिन दृश्य नियंत्रक पर ही नहीं। लेकिन फिर, क्या यह घटना दृश्य के दृश्य नियंत्रक को बुलबुला जारी नहीं रखेगी, इसे संभाल नहीं पाती है? या यह एक और विशेष मामला है क्योंकि मैं इसे मैन्युअल रूप से भेजता हूं? –
ठीक है, मुझे लगता है कि यह समझ में आता है। 'TouchesBegan: 'का डिफ़ॉल्ट कार्यान्वयन कुछ भी नहीं करता है, इसलिए जब आप इसे अगले' UIView' ऑब्जेक्ट पर भेज देते हैं, तो यह बस समाप्त होता है। क्या टच इवेंट को देखने के लिए मैन्युअल रूप से दृश्य नियंत्रक को पास करना संभव है? –
क्या आपने '[self.nextResponder touchesBegan: ...] 'के बजाय' [सुपर स्पर्श बेगन: ...] 'को कॉल करने का प्रयास किया है, मैंने कुछ लोगों को उस विधि का उपयोग करके देखा है, लेकिन मुझे यकीन नहीं है कि यह क्या करता है। –