How to pop from one view controller to another view controller

女生的网名这么多〃 提交于 2019-12-02 18:12:29

Swift 4.0 - Swift 5.0

 for controller in self.navigationController!.viewControllers as Array {
            if controller.isKind(of: HomeViewController.self) {
                self.navigationController!.popToViewController(controller, animated: true)
                break
            }
        }
Eric Genet

You can't pop to a new view controller (like you do with your secondViewController example).

When using a UINavigationController you

Add Controller to the stack with:

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

Pop to the previous one with :

[self.navigationController popViewControllerAnimated:YES];

Pop to a previous controller in the stack (Must have been pushed before) :

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

Go back to the root Controller with

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

                break;
            }
        }

Try this

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

First:

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

You can’t do this because you allocate a new Sec view controller that’s not in a navigation controller.

Consider using this:

You are in 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];
    }
}

Try like this

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

}

For Swift 3.0, use filter:

let desiredViewController = self.navigationController!.viewControllers.filter { $0 is YourViewController }.first!
self.navigationController!.popToViewController(desiredViewController, animated: true)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!