2012-07-18 10 views
5

मैं कुंजीपटल सहित अन्य सभी दृश्यों, ऊपर एक अर्द्धपारदर्शी दृश्य डाल करने के लिए, इस कोड का उपयोग स्क्रीन टिंट कर पाए हैं जिनमें शामिल हैं:कैसे पूरे स्क्रीन पर एक पारदर्शी ओवरले बनाने के लिए, सक्रिय कीबोर्ड

int count = [[[UIApplication sharedApplication]windows]count]; 
[[[UIApplication sharedApplication] windows] objectAtIndex:count-1]addSubview:tintView]; 

अब मैं एक समस्या से गुजर चुका हूं। मेरा ऐप एक MFMessageComposeViewController प्रदर्शित करने के लिए MessageUI.framework का उपयोग करता है, जो उपयोगकर्ता को एक टेक्स्ट संदेश भेजने की अनुमति देता है। यहां वह जगह है जहां मैं समस्या से गुजरता हूं।

जब मैं इस मामले (जब संदेश दृश्य दिखा रहा है) में ऊपर कोड निष्पादित, इसे सही ढंग से काम करता है। समस्या यह है कि उपयोगकर्ता अब नीचे दिए गए संदेश दृश्य से बातचीत नहीं कर सकता है। मैं अपने tintView पर userinteractionenabled को सेट कर रहा हूं, लेकिन इस मामले में यह समस्या की मदद नहीं करता है।

टिंट दृश्य हां में छिपा स्थापना, तथापि, बातचीत की अनुमति नहीं देता। इस संपत्ति को बदलकर कुछ करने से संदेश दृश्य को बातचीत करने की अनुमति मिलती है। जाहिर है, मैं चाहता हूं कि tintView दिखाई दे, हालांकि।

मैं सर्वोच्च UIWindow में देखा गया NSLogged और पाया कि UIRemoteView (जो मैं जो भी बारे में कोई जानकारी मिल सकता है लेकिन क्या MessageUI.framework में विचारों को प्रदर्शित करता है हो रहा है) को देखने के स्पर्श जब tintView प्राप्त नहीं है इसके ऊपर है

मैं भी एक और UIView साथ MFMessageComposeViewController के साथ बातचीत इस पर दिखाया गया है कैसे अनुमति दे सकते हैं। Userinteractionenabled इस मामले में काम नहीं करता है, लेकिन दृश्य को छिपाने के लिए सेट कर रहा है (जो मैं नहीं चाहता) करता है।

+1

तुम कोशिश क्या '[tintView becomeFirstResponder];' – Scar

+0

मैं tintView उपयोगकर्ता इनपुट की अनदेखी और उन्हें संभालने के लिए यह नीचे देखने की अनुमति देना चाहते। जब मैं MessageUI.framework का उपयोग करने का प्रयास करता हूं तो यह ठीक काम करता है। तो, नहीं, मैंने कोशिश नहीं की, क्योंकि मैं इनपुट को प्रतिक्रिया देने के लिए tintView नहीं चाहता। मैं फिर भी कोशिश की थी "[tintView resignFirstResponder]" और "[[[[[[UIApplication sharedApplication] विंडोज़] objectAtIndex: 0] becomeFirstResponder: 0] subviews] objectAtIndex]" इस पर – jadengeller

+0

कोई परिणाम? यह अभी भी एक मुद्दा है जिसे मैं देखता हूं। – NSProgrammer

उत्तर

7

मुझे लगता है कि आप अपने रंग को ध्यान में रखते -hitTest: ओवरराइड कर सकते हैं nil

लेकिन वापस जाने के लिए: ऐसा लगता है खिड़कियों कि आप "के मालिक हैं" नहीं है में subviews डालने के लिए बुरा व्यवहार की तरह ... आप अधिमानतः अपना खुद का बना हो सकता है इसके लिए खिड़की .. क्या मैं पूछ सकता हूं कि आप कीबोर्ड को क्यों टेंट करना चाहते हैं?

संपादित करें: करने के लिए तो वापस, अच्छी तरह से यह सिर्फ एक कुंजीपटल के लिए काम करता है, लेकिन मॉडल दृश्य नियंत्रकों के लिए टूट जाता है:

https://gist.github.com/3139219

संपादित करें 2:

मैं कुछ कोड है कि इस काम के दर्शाता लिखा था ड्राइंग बोर्ड .. क्षमा करें!

+0

मैं इसे अपनी उपस्थिति बदलने के लिए टिंट करना चाहता हूं। यह वास्तव में एक AVCaptureVideoPreviewLayer युक्त कैमरा दिखाने के लिए एक दृश्य के साथ रंगा हुआ है, लेकिन मुझे लगता है कि उल्लेख नहीं था आदेश प्रश्न सरल बनाने के लिए। क्या कोई तरीका है कि मैं कीबोर्ड के ऊपर अपना यूआईविंडो बना सकता हूं (और अन्य सभी विचार- मैं वास्तव में पूरी स्क्रीन को टिनटिंग कर रहा हूं)? मैं इसके लिए नया हूं इसलिए मुझे यकीन नहीं था कि कैसे। – jadengeller

+0

UIView पर हिटटेस्ट ओवरराइड करने से समस्या ठीक नहीं होती है। यह जानना उपयोगी होगा कि छिपाने के लिए क्या दृश्य स्थापित करना है, इसे छिपाने के लिए इसे खींचने के अलावा इसे खींचने के अलावा समस्या को ठीक करता है (लेकिन यह दिखाई नहीं देता है)। – jadengeller

+0

आप एक विंडो बना सकते हैं - वे अधिकतर विचारों की तरह काम करते हैं: '[[UIWindow alloc] initWithFrame: ]', लेकिन मुझे लगता है कि यह निराश है .. लेकिन आपके मामले के लिए यह ठीक है। (मैंने मदद पॉपओवर के लिए पहले किया है) – nielsbot

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