2010-11-25 9 views
5

मैं दो मॉडल दृश्य नियंत्रक को बर्खास्त करने की जरूरत है, मुझे पता है दो या अधिक दृश्य नियंत्रकोंदो या अधिक बर्खास्त करने के लिए कैसे करें ModalViewController?

 UINavigationController* navController = self.navigationController; 
    NSArray *array=[navController viewControllers]; 
    UIViewController* controller = [navController.viewControllers objectAtIndex:0]; 
    [navController popToViiewController:controller animated:YES]; 

यह मैं कैसे मेरी पहली दृश्य पर वापस नेविगेट कर सकते हैं, लेकिन अगर वहाँ दो हैं या अधिक मोडल दृश्य को खारिज है पॉप करने के लिए कैसे तो मैं कैसे

वापस नेविगेट कर सकते हैं मेरी मदद कृपया, -[UIViewController dismissModalViewController] के लिये दस्तावेज से धन्यवाद, मदन मोहन

+1

रूट दृश्य नियंत्रक आप कर सकते हैं करने के लिए पॉप करने के लिए बस यह करें: '[self.navigationController popToRootViewControllerAnimated: YES];' आपके रास्ते की बजाय, जो थोड़ा सा है। –

+0

यह वर्तमान मोडल व्यू कंट्रोलर है, मैं इसे कैसे पॉप कर सकता हूं –

उत्तर

2
UINavigationController* navController = self.navigationController; 
NSArray *viewControllers=[navController viewControllers]; 
UIViewController* controller = [viewControllers objectAtIndex:0]; 
[navController popToViewController:controller animated:YES]; 

अगर आप उपरोक्त कोड में सूचकांक 0 में ऑब्जेक्ट सेट अपने वाला पहला दृश्य जो एक धक्का दृश्य नियंत्रक है पर ले जाएगी।

1) रूटव्यू ---> मूडलव्यू 1 ---> मूडलव्यू 2 ---> मूडलव्यू 3 यदि आप उपर्युक्त कोड का उपयोग करते हैं तो आप रूट व्यू में होंगे।

2) रूटव्यू ---> पुशव्यू 1 ----> मूडलव्यू 1 ---> मूडलव्यू 2 -----> मूडलव्यू 3। यदि आप उपरोक्त कोड का उपयोग करते हैं तो आप पुश व्यू में होंगे।

5

:

आप लगातार कई मोडल दृश्य नियंत्रकों प्रस्तुत करते हैं, और इस तरह मोडल दृश्य नियंत्रकों के एक ढेर का निर्माण, स्टैक में कम एक दृश्य नियंत्रक पर इस विधि बुला तो खारिज इसके तत्काल बच्चे को देखने नियंत्रक और सभी दृश्य नियंत्रकों उस बच्चे के ऊपर स्टैक पर । जब ऐसा होता है, तो केवल शीर्ष-दृश्य दृश्य एनिमेटेड फ़ैशन में खारिज कर दिया जाता है; कोई इंटरमीडिएट व्यू कंट्रोलर बस स्टैक से हटा दिए गए हैं। शीर्ष-दृश्य को मोडल संक्रमण शैली का उपयोग करके खारिज कर दिया गया है, जो अन्य द्वारा उपयोग की जाने वाली शैलियों से भिन्न है, जो ढेर में कम नियंत्रक देखते हैं।

3

मैं निम्नलिखित उपयोगिता स्थिर विधि का उपयोग क्रियार्थ द्योतक के ढेर के लिए popToRootViewController अनुकरण करने के लिए:

[Util popModalsToRootFrom:aViewController]; 

आप और अधिक उन्नत कुछ चाहते हैं, तो आप कर सकता है:

// Util.m 
+ (void)popModalsToRootFrom:(UIViewController*)aVc { 
    if(aVc.parentViewController == nil) { 
     return; 
    } 
    else { 
     [Util popModalsToRootFrom:aVc.parentViewController]; // recursive call to this method 
     [aVc.parentViewController dismissModalViewControllerAnimated:NO]; 
    } 
} 

आप इसका उपयोग इस प्रकार यह:

+ (void)popModalsFrom:(UIViewController*)aVc popCount:(int)count { 
    if(aVc.parentViewController == nil || count == 0) { 
     return; 
    } 
    else { 
     [Util popModalsFrom:aVc.parentViewController popCount:count-1]; // recursive call to this method 
     [aVc.parentViewController dismissModalViewControllerAnimated:NO]; 
    } 
} 

फिर पॉप के लिए मोड की संख्या पास करें, या केवल -1 को पॉप करने के लिए रूट के लिए रास्ता होगा।

1
iOS 5 लिए

, animation == YES (विचारों अनुक्रम में छिपा होगा) और completion ब्लॉक के समर्थन:

+ (void)dismissAllVCsForVC:(UIViewController *)VC animated:(BOOL)animated completion:(BPSimpleBlock)completion { 
    if (VC.presentedViewController == nil) { 
     if (completion) { 
      completion(); 
     } 
    } else { 
     [BaseViewController dismissAllVCsForVC:VC.presentedViewController 
             animated:animated 
             completion: 
     ^{ 
      [VC dismissViewControllerAnimated:animated completion:completion]; 
     }]; 
    } 
} 
4

उपयोग इस कोड को नीचे

[[[self presentingViewController] presentingViewController] dismissModalViewControllerAnimated:YES]; 

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

  • कोई संबंधित समस्या नहीं^_^