2011-09-01 7 views
7

मेरे ऐप में, मेरे पास ओवरले व्यू है, जो कुछ प्रसंस्करण और नेटवर्किंग होने पर प्रदर्शित होता है। यह पूरी स्क्रीन भरने पर, एक लोडिंग सूचक के साथ केवल एक semitransparent दृश्य (UIView का उपclass) है।अंतर्निहित विचारों के साथ उपयोगकर्ता इंटरैक्शन को अवरुद्ध करना

मैं उपयोगकर्ता-इंटरैक्शन प्राप्त करने के लिए अंतर्निहित विचारों में से किसी एक को रोकना चाहता हूं (उदा। अंतर्निहित तालिका दृश्य को स्क्रॉल नहीं किया जाना चाहिए, एक बटन दबाया नहीं जाना चाहिए)।

ओवरले व्यू के भीतर से मैं यह कैसे कर सकता हूं?

+0

क्या आपके ओवरले दृश्य दृश्य स्टैक के शीर्ष पर है? – Nekto

उत्तर

10

ओवरले दृश्य के लिए संपत्ति को YES पर सेट करें। यह सभी स्पर्श घटनाओं को ओवरले व्यू पर होने का कारण बनता है और अंतर्निहित विचारों को पारित नहीं किया जाएगा।

+0

आप पहले थे =) – Nekto

+4

मेरे लिए काम नहीं करता है, मैंने इसे init के साथ-साथ loadView में सेट करने का प्रयास किया है, दोनों मामलों में, नीचे दिए गए बटन अभी भी स्पर्श ईवेंट प्राप्त करते हैं। – Ahti

+0

@Ahti: क्या आप इंटरफ़ेस बिल्डर का उपयोग कर रहे हैं? (मुझे नहीं लगता कि आप हैं, लेकिन बस सुनिश्चित कर रहे हैं।) –

4

बस अपने सेमिट्रेंसेंट ओवरले व्यू की संपत्ति userInteractionEnabled सेट करें।

1

बस सुनिश्चित करें कि ओवरले व्यू और उसके सभी मूल दृश्यों में userInteractionEnabled नहीं है, जो छिपा नहीं है, और0.01 से कम नहीं है। फिर उपयोगकर्ता के स्पर्श इसके पीछे दिखाई देने वाले दृश्यों के बजाय ओवरले के साथ बातचीत करेंगे। यह भी ध्यान रखें कि यह उस क्षेत्र में बातचीत को अवरुद्ध नहीं करेगा जो इसके पर्यवेक्षकों द्वारा कवर नहीं किया गया है: भले ही आपका दृश्य पूरी स्क्रीन को कवर करता हो, भले ही उसके माता-पिता केवल 10x10 हों, तो यह केवल उसके 10x10 क्षेत्र के भीतर बातचीत को अवरुद्ध कर देगा।

आपको यह सुनिश्चित करने की भी आवश्यकता हो सकती है कि resignFirstResponder किसी भी मौजूदा पहले उत्तरदाता पर कॉल किया गया है, या उपयोगकर्ता अब भी कीबोर्ड के माध्यम से इसके साथ बातचीत करने में सक्षम होगा।

2

मुझे लगता है कि सबसे अच्छा तरीका है इन 2 तरीकों का उपयोग करने के लिए है:

[[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 

[[UIApplication sharedApplication] endIgnoringInteractionEvents]; 

सही, भारी प्रोसेसिंग आपरेशन करने से पहले और उन्हें क्रमशः पूरा करने के बाद।

+0

यह एकमात्र उत्तर था जो मेरे लिए काम करता था। इस पर ध्यान दिए बिना कि आपका ओवरले दृश्य पदानुक्रम में कहां है। मेरा ओवरले स्क्रॉलव्यू पर था, और स्क्रोलव्यू के नियंत्रक में बदलाव किए बिना स्क्रोलिंग को रोकने का यही एकमात्र तरीका था (चूंकि ओवरले का उपयोग कई नियंत्रकों द्वारा किया जाता है) – Cogwheel

+0

@ कोगव्हील मुझे खुशी है कि यह आपकी समस्या का समाधान कर रहा है! – ppalancica

संबंधित मुद्दे