2010-09-09 14 views
46

संभव डुप्लिकेट:
How to tell if UIViewController's view is visibleकैसे जांचें कि कोई विशिष्ट UIViewController का दृश्य वर्तमान में दृश्यमान है या नहीं?

मैं एक ऐप्लिकेशन है जो नेटवर्क से आने वाले डेटा के एक निरंतर प्रवाह संसाधित करता है और कि देखने के लिए उपयोगकर्ता के लिए अलग UIViews की संख्या प्रदान करता विकासशील कर रहा हूँ डेटा।

कुछ मॉडल डाटा नेटवर्क से आने वाली धारा के आधार पर अद्यतन किया जाता है, मैं जुड़े UIViewController या UITableViewController का उपयोग और उस पर -setNeedsDisplay करते हैं या -reloadData (UIViewController के मामले में) (UITableViewController के मामले में)।

क्या यह जांचने का कोई तरीका है कि कोई दिया गया UIView वर्तमान में प्रदर्शित किया जा रहा है (केवल लोड होने से परे) ताकि मैं केवल -setNeedsDisplay या -reloadData कर सकता हूं यदि उपयोगकर्ता वर्तमान में उस UIView को देख रहा है? ऐसा लगता है कि कॉलिंग -सेट नेड्स डिस्प्ले या रीलोडडाटा को इस विचार पर देखा गया है कि उपयोगकर्ता वर्तमान में देख रहा है वह प्रोसेसिंग पावर का कचरा है और बैटरी जीवन के लिए अच्छा नहीं होगा। जब उपयोगकर्ता आखिरकार एक ऐसे दृश्य पर स्विच करता है जिसे पहले अपडेट किया गया था, तो -setNeedsDisplay या reloadData पर -viewWillAppear पर अधिक समझदारी होगी।

धन्यवाद

+0

http://stackoverflow.com/questions/2777438/how-to-tell-if-uiviewcontrollers-view-is-visible/2777460#2777460 – LolaRun

+0

मैं एक जवाब नहीं जोड़ सकते हैं, लेकिन अब एक संपत्ति है बुलाया जाता है दृश्य नियंत्रकों पर दृश्य –

उत्तर

132

कुछ शोध करने के बाद, मैं एक अलग प्रश्न यहाँ पर पोस्ट में इस उत्तर पाया ... यह सबसे अच्छा तरीका है प्रतीत हो रहा है ...

दृश्य की खिड़की संपत्ति गैर नहीं के बराबर है, तो एक दृश्य वर्तमान में दृश्यमान है, इसलिए मुख्य दृश्य जाँच दृश्य नियंत्रक में:

if (viewController.isViewLoaded && viewController.view.window){ 
    // viewController is visible 
} 
+5

मैंने अभी संपादित किया [अन्य प्रश्न] (http://stackoverflow.com/questions/2777438/how-to-tell-if-uiviewcontrollers-view-is-visible/2777460#2777460) गलती से बचने के लिए पहले isViewLoaded जांचने के लिए दृश्य को लोड करना जो उपरोक्त यह कोड करेगा। परीक्षण करें: 'अगर (viewController.isViewLoaded && viewController.view.window) ... ' – progrmr

+1

यह उत्तर वास्तव में सही के रूप में चिह्नित नहीं किया जाना चाहिए, क्योंकि यह वीसी के दृश्य को लोड करने को ट्रिगर करेगा। ऊपर जुड़े प्रोग्रामर का जवाब देखें। –

+2

यह आपको देखने के लिए झूठी सकारात्मक जानकारी देगा नियंत्रक जो अन्य द्वारा बाधित हैं, सामान्य रूप से प्रदर्शित दृश्य नियंत्रक -> सही तरीके से नहीं।यह क्या करता है एक दृश्य की विश्वसनीय जांच नियंत्रक दिखाई नहीं दे रहा है, लेकिन दूसरी तरफ नहीं। – Till

12

UIViewController का एक उपवर्ग है कि आप तो आगे उपवर्ग कर सकते हैं करने के लिए अपने नियंत्रकों को यह जोड़ें, या। पहुँच यह एक संपत्ति या चर का उपयोग कर:

- (void)viewDidAppear:(BOOL)animated 
{ 
[super viewDidAppear:animated]; 
visible = YES; 
} 

- (void)viewWillDisappear:(BOOL)animated 
{ 
visible = NO; 
[super viewWillDisappear:animated]; 
} 
+1

इसके अलावा, इसे एक श्रेणी के रूप में न करें। एक श्रेणी में विधियों को फिर से परिभाषित करना बुरा अभ्यास है। –

+1

यह एक श्रेणी में एक आपदा होगी क्योंकि आप viewDidAppear या ViewWillAppear पर होने वाले किसी वर्ग-विशिष्ट व्यवहार को परिभाषित करने में सक्षम नहीं होंगे। – jpswain

+0

बेशक आप कक्षा-विशिष्ट व्यवहार को अभी भी परिभाषित कर सकते हैं। आप विधियों को ओवरराइड कर सकते हैं और अभी भी सुपर विधि को कॉल कर सकते हैं। हालांकि यह एक पुरानी पोस्ट है, और मुझे लगता है कि एक श्रेणी उपयोगी नहीं होगी क्योंकि आपको 'दृश्यमान' स्टोर करने की आवश्यकता होगी। मैं इसे संपादित करूंगा। –

-4

बस पूर्णता के लिए, मुझे लगता है मैं कैसे निर्धारित करने के लिए करता है, तो दृश्य नियंत्रक है में जोड़ा जाने लगा कि टैब आधारित ऐप में प्रदर्शित किया जा रहा है:

+(BOOL) isSelectedViewController:(UIViewController *)someVC; 
{ 
    myAppDelegate *appD = [[UIApplication sharedApplication] delegate]; 
    UIViewController *selectedVC = [appD.TabBarController selectedViewController]; 

    return selectedVC == someVC; 
} 
+2

यह बहुत उपयोग करने के लिए (myViewController.tabBarController.selectedViewController == myViewController.navigationController) अच्छे हो सकता है, यह सोचते हैं आप टैब बार नियंत्रक के भीतर नेविगेशन नियंत्रक घोंसला बनाने से कर रहे हैं। – Johnus

+0

मैं यदि आप जानते हैं कि उप नियंत्रक एक नेविगेशन नियंत्रक है लगता है, लेकिन है कि अक्सर ऐसा नहीं है। –

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