popup到根,然后在iPhone上执行segue

我正在运行iOS 6.0故事板启用

我有一个NavController链接到一个TableViewController。 这个TableView可以延续到AViewController或BViewController。

当我在A时,我想弹回到根目录并用这一行执行到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'' 

我错过了什么?

segue将被附加到您popup的视图控制器,而不是包含它的容器视图控制器的nav 。 所以这会更接近:

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

但是,我认为这里的问题是stream行的animation会和赛格发生冲突。 做animation…animation:没有可能修复它,但我认为这将是更正确的(和更健壮的animation)执行从根VC的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]; } }