2013-10-09 4 views
13

जब मेरे एप्लिकेशन को पृष्ठभूमि में प्रवेश करती है, मेरे रीति से प्रस्तुत दृश्य नियंत्रक तो जैसे एक चेतावनी दृश्य को खारिज करते ...आईओएस 7 में प्रोग्रामेटिक रूप से UIAlertView को ठीक से कैसे खारिज करें?

// called when view controller receives a UIApplicationDidEnterBackgroundNotification 
- (void)applicationDidEnterBackground:(NSNotification *)notification 
{ 
    if (self.alertView) { 
     [self.alertView dismissWithClickedButtonIndex:0 animated:NO]; 
     self.alertView = nil; 
    } 
} 

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

इसके अलावा, मोडल दृश्य नियंत्रक खारिज (एक मंद बार बटन आइटम दोहन से) पता चलता है कि पेश दृश्य नियंत्रक के लिए बार बटन आइटम भी हल्के हो जाते हैं। बार बटन आइटम कार्यात्मक होते हैं, लेकिन वे मंद रहते हैं।

तो कैसे मैं बार बटन आइटम अप्रकाशित मंद हो? या, मैं पृष्ठभूमि में प्रवेश करने वाले ऐप के जवाब में आईओएस 7 में प्रोग्रामेटिक रूप से एक चेतावनी दृश्य को कैसे ठीक से खारिज कर सकता हूं?

iOS 7 यूआई संक्रमण मार्गदर्शिका राज्यों निम्नलिखित:

जब अलर्ट या कार्रवाई चादर दिखाई देता है, iOS 7 स्वचालित रूप से इसके पीछे विचारों का टिंट रंग धुंधली हो जाती है। इस रंग परिवर्तन का जवाब देने के लिए, एक कस्टम व्यू उप-वर्ग जो टिंटकॉलर को अपने प्रतिपादन में उपयोग करता है, उचित होने पर प्रतिपादन को रीफ्रेश करने के लिए tintColorDidChange को ओवरराइड करना चाहिए।

मेरी नेविगेशन बार और बार बटन आइटम कस्टम दृश्य नहीं हैं; मैंने उन्हें उपclass नहीं किया था। मैंने स्टोरीबोर्ड में नेविगेशन बार को उनके डिफ़ॉल्ट विशेषताओं (बार बटन आइटम के साथ) के साथ बनाया है। तो मेरे लिए tintColorDidChange ओवरराइड करने के लिए कोई जगह नहीं है।

मेरे विचार की

सभी उनके tintColor संपत्ति के लिए डिफ़ॉल्ट मान का उपयोग करें।

मैं कोशिश की है फिर से seting सफलता के बिना डिफ़ॉल्ट मान पर रंग का रंग: सफलता नहीं मिली:

if (self.alertView) { 
     [self.alertView dismissWithClickedButtonIndex:0 animated:NO]; 
     self.view.tintColor = nil; 
     self.view.window.tintColor = nil; 
     self.alertView = nil; 
    } 

मैं भी फिर से seting दृश्य नियंत्रक के viewDidAppear में टिंट रंग की कोशिश की है।

मैं भी सफलता नहीं मिली "सामान्य" मुख्य दृश्य के tintAdjustmentMode स्थापित करने की कोशिश की:

if (self.alertView) { 
    [self.alertView dismissWithClickedButtonIndex:0 animated:NO]; 
    self.alertView = nil; 

    self.view.tintAdjustmentMode = UIViewTintAdjustmentModeNormal; 
} 

वैसे, अगर एप्लिकेशन समाप्त किया गया, जबकि पृष्ठभूमि में, एप्लिकेशन बार बटन आइटम होने के साथ relaunches सही टिंट (यानी, अन-मंद)।

+0

मेरे अलर्ट विचार पृष्ठभूमि से संक्रमण के माध्यम से आ रहे हैं, मेरी निराशा के लिए बहुत कुछ। मैं इसे और भी देख लूंगा। – HalR

+0

'[[UIAplplication sharedAplication] keyWindow] का उपयोग करके, जांचें कि वर्तमान में सक्रिय विंडो क्या है। चूंकि UIAlertView की अपनी खिड़की है, इसलिए हो सकता है कि वह विंडो ठीक से खारिज न हो जाए, जिससे आपकी बार (बटन आइटम) मंद हो जाए। ऐप फिर से सक्रिय होने से पहले आप इसे खारिज करने का भी प्रयास कर सकते हैं ('आवेदन: willEnterForeground:')। –

उत्तर

9

मुझे यकीन है कि यह ऐप्पल के अंत में एक बग है। मैं https://bugreport.apple.com में एक बग रिपोर्ट दायर किया है, एप्पल that is how Apple assigns priority to bugs के रूप में यह करने के लिए ध्यान देने के लिए, प्राप्त करने के लिए एक नकली बग रिपोर्ट दर्ज करें।

+0

यह अधिक सटीक लगता है। यदि ओएस पृष्ठभूमि पर मोडल्स को खारिज कर देता है, तो इसे पूरी तरह से करना चाहिए। इस बीच, आप मानक 'dismissWithClickedButtonIndex: एनिमेटेड:' का उपयोग कर सकते हैं इससे पहले कि आपका ऐप पृष्ठभूमि पर भेजा गया हो – Brenden

+0

इस चीज़ पर कोई प्रगति? – Xeieshan

5

हालांकि मैं UIApplicationDidEnterBackgroundNotification के जवाब में प्रोग्रामेटिक रूप से एक चेतावनी दृश्य को खारिज कर सकता हूं, आईओएस 7 में स्वचालित टिंट-डाimming अपडेट नहीं होगा।

हालांकि, स्वचालित रंग-मंद व्यवहार करता है, तो मैं एक UIApplicationWillResignActiveNotification बजाय के जवाब में चेतावनी दृश्य को खारिज जवाब देंगे।

// called when view controller receives a UIApplicationWillResignActiveNotification 
- (void)applicationWillResignActiveNotification:(NSNotification *)notification 
{ 
    if (self.alertView) { 
     [self.alertView dismissWithClickedButtonIndex:0 animated:NO]; 
     self.alertView = nil; 
    } 
} 
+0

आपको अभी भी एक बग फ़ाइल करना चाहिए जैसे कि @ मोहम्मद नीचे बताता है। – Brenden

+0

याद रखें कि नियंत्रण केंद्र और अधिसूचना केंद्र खोलने से आपके ऐप को इस्तीफा देने का कारण बनता है, और अलर्ट को खारिज कर दिया जाएगा। यह एक इष्टतम व्यवहार नहीं है। Sgosha के समाधान का उपयोग करने पर विचार करें। –

+1

@LeoNatan कृपया समझाएं। आईओएस 7 पर, मैं अलर्ट स्क्रीन पर नियंत्रण केंद्र या अधिसूचना केंद्र प्रदर्शित करने के लिए किनारे से स्वाइप करने में असमर्थ हूं। – bilobatum

7

मैं अपने अनुप्रयोग में ही बग का अनुभव है और सफलतापूर्वक एक समाधान मिल गया।यूआईएलर्टव्यूव पृष्ठभूमि में खारिज होने के बाद आपको बस अपने आवेदन की मुख्य विंडो पर UIViewTintAdjustmentModeNormal पर tintAdjustmentMode सेट करना होगा। आसान :)

+0

आप कह रहे हैं 'self.view.tintAdjustmentMode = UIViewTintAdjustmentModeNormal;' सही? मैंने कोशिश की और यह मेरे लिए काम नहीं किया, क्या आप इसे 'applicationDidEnterBackground' में कर रहे हैं (जो मैंने कोशिश की), या हो सकता है कि आप इसे अग्रभूमि में फिर से दर्ज करते समय कर रहे हों? –

+0

@ मोहम्मद हैफेज़ मैं इसे अगली पंक्ति के बाद कॉल करता हूं - [UIAlertView dismissWithClickedButtonIndex: एनिमेटेड:] – sgosha

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