2011-08-17 17 views
7

मैं आईओएस में MPMoviePlayerController का उपयोग कर रहा हूं। मैं वीडियो चलाने के दौरान हो सकता है कि किसी भी त्रुटि पर सुन रहा हूँ। मेरे त्रुटि हैंडलर में, मैं UIAlertView पॉप अप करता हूं। कभी-कभी त्रुटियां एक-दूसरे के त्वरित उत्तराधिकार में हो सकती हैं और इस प्रकार कई अलर्ट बॉक्स खड़े हो जाएंगे। एक बेहतर उपयोगकर्ता अनुभव के लिए, यदि कोई पिछला अभी भी प्रदर्शित होता है तो मैं एक और चेतावनी पॉप अप नहीं करना चाहता हूं। जब आप एक चेतावनी पॉप अपस्टैकिंग से एकाधिक UIAlertView को कैसे रोकें?

true करने के लिए एक बूलियन सेट, false के लिए सेट है जब आप एक चेतावनी बंद करो, और हमेशा बूलियन जाँच अगर यह true है आप एक घटना पॉप अप से पहले देखने के लिए:

उत्तर

5

इस प्रयास करें। यदि यह true है, तो आपको पता चलेगा कि आपके पास पहले से दिखने वाली एक चेतावनी विंडो है।

You can find this solution and some other discussion here

+0

बिल्कुल। आपके द्वारा चिपकाया गया कोड एसपीआई का उपयोग करने जैसा ही बुरा है, और जब संभवतया आपको अस्वीकार नहीं किया जाएगा (क्योंकि आप सबव्यू पोकिंग को ढूंढना मुश्किल है), यह कुछ ऐसा है जो आपको * ऐप से अस्वीकार कर देना चाहिए दुकान। यह UIAlertView कैसे काम करता है और संभवतः ओएस अपडेट को तोड़ने के बारे में धारणाएं बना रहा है। –

+0

धन्यवाद, मैंने अपने उत्तर के उस हिस्से को हटा दिया है। – mopsled

1

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

+0

कभी-कभी सिस्टम पॉपअप पॉप अप करता है और अजीब व्यवहार का कारण बनता है :( – powerj1984

0

जहां तक ​​मुझे पता है, एकमात्र तरीका यह है कि एक चेतावनी वर्तमान में प्रदर्शित की जा रही है या नहीं/और वर्तमान में आपके आवेदन में खारिज कर दिया जा रहा है या नहीं। ऐप डिलीगेट में अलर्ट दिखाने का प्रयास करें, और उसके बाद प्रत्येक बार अलर्ट बंद होने पर ऐप डिलीगेट को सूचित करने के लिए अधिसूचना का उपयोग करें। इस तरह ऐप डिलीगेट ट्रैक करता है कि बुलियन फ्लैग वैरिएबल के साथ कोई अलर्ट है या नहीं।

1

जब कोई चेतावनी दिखाई देती है, तो इसे _UIAlertOverlayWindow में ले जाया जाएगा। इसलिए, एक बहुत ही नाजुक विधि सभी खिड़कियों के माध्यम से फिर से शुरू करना है और जांचें कि क्या कोई UIAlertView सबव्यूव है या नहीं।

-(BOOL)checkAlertViewVisibleStatus 
{ 
    for (UIWindow* window in [UIApplication sharedApplication].windows) 
    { 
    NSArray* subviews = window.subviews; 
     if ([subviews count] > 0) 
     if ([[subviews objectAtIndex:0] isKindOfClass:[UIAlertView class]]) 
      return YES; 
    } 
return NO; 
} 

यह undocumented है के रूप में यह आंतरिक दृश्य पदानुक्रम पर निर्भर करता है, हालांकि एप्पल इस बारे में शिकायत नहीं कर सकता। एक और अधिक विश्वसनीय लेकिन और भी अधिक गैर-दस्तावेजी विधि यदि `

[_UIAlertManager visibleAlert]

` नहीं के बराबर है की जाँच करने के लिए है।

ये विधियां जांच नहीं सकती हैं कि स्प्रिंगबोर्ड से UIAlertView दिखाया गया है या नहीं।

0

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

Warning: Attempt to present <UIAlertController: 0x7f9ef34c17e0> on <MasterViewController: 0x7f9ef344ec90> which is already presenting (null) 
0

यह काम करना चाहिए:

-(BOOL) doesAlertViewExist 
{ 
    if ([[UIApplication sharedApplication].keyWindow isMemberOfClass:[UIWindow class]]) 
    { 
     return NO;//AlertView does not exist on current window 
    } 
    return YES;//AlertView exist on current window 
} 
नहीं
संबंधित मुद्दे