流行到根,然后在iPhone上进行SEGUE(Pop to root then perform se

2019-10-17 14:53发布

我在iOS上运行启用6.0分镜

我有一个NavController链接到TableViewController。 这可以TableView中Segue公司以AViewController或BViewController。

当我在,我想弹出回到根,并执行与赛格瑞此行B:

UINavigationController *nav = self.navigationController;
[nav popToRootViewControllerAnimated:YES];
[nav performSegueWithIdentifier:@"GoToB" sender:self];

我查了故事板,GOTOB确实存在,从TableViewController挂BViewController

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Receiver (<NavMainViewController: 0xb921fa0>) has no segue with identifier 'GoToB''

我在想什么?

Answer 1:

该SEGUE将连接到你弹出来,而不是视图控制器nav是包含它的容器视图控制器。 因此,这将是更接近:

UINavigationController *nav = self.navigationController;
[nav popToRootViewControllerAnimated:YES];

UIViewController *rootVC = [nav.viewControllers objectAtIndex:0];
[rootVC performSegueWithIdentifier:@"GoToB" sender:self];

但是,我觉得这里的问题将是流行的动画将与SEGUE冲突。 这样做有...动画弹出:NO可能修复它,但我认为这将是更正确的(和动画更稳健),从rootVC执行SEGUE。

rootVC将实现如下viewDidAppear:

- (void)viewDidAppear:(BOOL)animated {

    [super viewDidAppear:animated];
    if (!self.isBeingPresented && /* any other condition that makes you want this */) {
        [self performSegueWithIdentifier:@"GoToB" sender:self];
    }
}


文章来源: Pop to root then perform segue on iPhone