17

आईओएस का उपयोग करके मेरे पास 15 व्यू कंट्रोलर हैं अब मैं एक व्यू कंट्रोलर से दूसरे व्यू कंट्रोलर में पॉप करना चाहता हूं।एक दृश्य नियंत्रक से दूसरे दृश्य नियंत्रक को कैसे पॉप करें

मैं इस कोड का उपयोग कर रहा हूँ:

SecondViewController *Sec=[SecondViewController alloc]init]; 
[self.navigationController popViewController:Sec animated:YES]; 

यह त्रुटि this ViewController not exist से पता चलता है और फिर मैं इस कोड का उपयोग कर रहा हूँ:

NSArray *array = [self.navigationController viewControllers]; 
[self.navigationController popToViewController:[array objectAtIndex:1] animated:YES]; 

इस कोड secondViewController को thirdViewController से पॉप करने के लिए सही है। लेकिन क्या करने के लिए पांचवें (5 वीं) जब हम नौवीं से पॉप (9) ViewController हुआ ViewController तो मैं नौवीं (9) ViewController में इस कोड का उपयोग कर रहा हूँ:

NSArray *array = [self.navigationController viewControllers]; 
[self.navigationController popToViewController:[array objectAtIndex:4] animated:YES]; 

यह नौवीं (9) ViewController पांचवें करने से पॉप नहीं करता (5 वां) ViewController अलग है कि यह नौवें (9वीं) ViewController आठ (8 वें) ViewController के लिए पॉप। जब हम Ninth(9th)ViewController में इस का उपयोग

NSArray *array = [self.navigationController viewControllers]; 
NsLog(@"array = %@",array); 

: जब हम इस पंक्ति का उपयोग मैं नहीं जानता कि क्या हुआ। एनएसएलओजी शो:

array= First(1st)ViewController; 
     Second(2nd)ViewController; 
     Eight(8th)ViewController; 
     Ninth(9th)ViewController; 

मुझे नहीं पता कि केवल चार दृश्य नियंत्रक क्यों दिखाते हैं। जब भी मैं 15 व्यू कंट्रोलर का उपयोग कर रहा हूं। यह समस्या प्रत्येक दृश्य नियंत्रक में होती है। उदाहरण के लिए यदि मैं पंद्रहवीं (15 वीं) व्यू कंट्रोलर को पांचवें (5 वें) व्यू कंट्रोलर पर पॉप फॉर्म का उपयोग कर रहा हूं तो एक ही समस्या प्रकट होती है।

NSArray *array = [self.navigationController viewControllers]; 
NsLog(@"array = %@",array); 

array=  First(1st)ViewController; 
      Second(2nd)ViewController; 
      fourteenth(14th)ViewController; 
      fifteenth(15th)ViewController; 

मैं व्यू कंट्रोलर की संख्या गिनना चाहता हूं और फिर विशिष्ट व्यू कंट्रोलर पर पॉप करना चाहता हूं।

+2

क्या आप वाकई सुनिश्चित हैं कि सभी व्यू कंट्रोलर नेविगेशन नियंत्रक को धक्का दिया जाता है? – talnicolas

उत्तर

26
for (UIViewController *controller in self.navigationController.viewControllers) 
        { 
            if ([controller isKindOfClass:[nameOfYourViewControllerYouWantToNavigate class]]) 
            { 
                [self.navigationController popToViewController:controller animated:YES]; 

                break; 
            } 
        } 
1

इस

MyTableViewController *vc = [[MyTableViewController alloc] init]; 
NSMutableArray *controllers = [NSMutableArray  
arrayWithArray:self.navigationController.viewControllers]; 
[controllers removeLastObject]; 
[controllers addObject:vc]; 
4

पहले की तरह का प्रयास करें:

SecondViewController *Sec=[SecondViewController alloc]init]; 
[self.navigationController popViewController:Sec animated:YES]; 

आप ऐसा नहीं कर सकते हैं क्योंकि आप उस एक नेविगेशन नियंत्रक में नहीं है एक नया Sec दृश्य नियंत्रक का आवंटन।

इसके उपयोग पर विचार:

आप 9 दृश्य नियंत्रक

for (int i= 0 ; i < [[self.navigationController viewControllers]count] ; i++) { 
    if ([[[self.navigationController viewControllers] objectAtIndex:i] isKindOfClass:[FifiViewControllerClassname class]]) { 
     [self.navigationController popToViewController:[array objectAtIndex:i] animated:YES]; 
    } 
} 
35

आप कोई नया दृश्य नियंत्रक करने के लिए पॉप नहीं कर सकते हैं (जैसे आप अपने secondViewController उदाहरण के साथ करते हैं) में हैं।

[self.navigationController pushViewController:<yournewViewController> animated:YES]; 

पॉप पिछले एक के साथ:

[self.navigationController popViewControllerAnimated:YES]; 

पॉप पिछले करने के लिए

एक UINavigationController का उपयोग करते समय आप

नियंत्रक ढेर करने के साथ जोड़े नियंत्रक में स्टैक (अवश्य से पहले धक्का दिया गया है):

[self.navigationController popToRootViewControllerAnimated:YES]; 
6

साथ

[self.navigationController popToViewController:<ViewControllerToPopTo> animated:YES]; 

जड़ पर वापस जाएँ नियंत्रक का प्रयास करें इस

[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:0] animated:YES]; 
1
BOOL check = FALSE; 
NSArray *viewControllers = [[self navigationController] viewControllers]; 
id obj; 
for(int i=0;i<[viewControllers count];i++) 
{ 
    obj=[viewControllers objectAtIndex:i]; 
    if([obj isKindOfClass:[yourclassname class]]) 
    { 
     check = TRUE; 
     break; 
    } 
} 

if (check) 
{ 

    [[self navigationController] popToViewController:obj animated:YES]; 
} 
else 
{ 
    yourclassname *yourclassnameObj=[self.storyboard instantiateViewControllerWithIdentifier:@"yourclassStoryBoardID"]; 
    [self.navigationController pushViewController:yourclassnameObj animated:true]; 

} 
1

स्विफ्ट 3.0 के लिए , फ़िल्टर का उपयोग करें:

let desiredViewController = self.navigationController!.viewControllers.filter { $0 is YourViewController }.first! 
self.navigationController!.popToViewController(desiredViewController, animated: true) 
संबंधित मुद्दे