Как перейти от одного контроллера вида к другому контроллеру вида

используя iOS у меня есть 15 ViewControllers теперь я хочу поп от одного ViewController к другому контроллеру представления.

я использую этот код:

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

это показывает и тогда я использую этот код:

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

этот код подходит для перехода от thirdViewController к secondViewController. Но что произошло, когда мы поп от девятого (9-го)ViewController до пятого (5-го)ViewController, то я использую этот код в Девятый (9-й)ViewController:

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

он не появляется от девятого (9-го)ViewController до пятого(5-го)ViewController, кроме того, что он всплывает девятый(9-й)ViewController до восьми (8-го)ViewController. Я не знаю, что произошло, когда мы используем эту строку:

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

когда мы используем это в Ninth(9th)ViewController. NsLog показывает:

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

Я не знаю, почему показывают только четыре контроллера вида. Всякий раз, когда я использую 15 контроллеров просмотра. Эта проблема возникает в каждом контроллере представления. Для экземпляр если я использую pop-форму пятнадцатого(15th)ViewController для пятого (5th)ViewController, то проявляется та же проблема.

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

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

Я хочу подсчитать количество ViewControllers, а затем перейти к конкретному ViewController.

7 ответов


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

                break;
            }
        }

вы не можете перейти к новому контроллеру представления (как в Примере secondViewController).

при использовании UINavigationController вы

Добавить Контроллер в стек с:

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

поп к предыдущему С :

[self.navigationController popViewControllerAnimated:YES];

Pop к предыдущему контроллеру в стеке (должно быть, был нажат раньше):

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

вернуться к корневой


попробуй такое

 [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:0] animated:YES];

первый:

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

вы не можете сделать это, потому что вы выделяете новый Sec просмотр контроллера, который не находится в навигационном контроллере.

используйте этот:

вы находитесь в 9 View controller

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];
    }
}

попробуйте так

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

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];

}

Для Swift 3.0 фильтр использовать:

let desiredViewController = self.navigationController!.viewControllers.filter {  is YourViewController }.first!
self.navigationController!.popToViewController(desiredViewController, animated: true)