如果您想以编程方式调用push segue,您需要在Interface Builder中为segue设置一个“Storyboard ID”,然后可以执行以下操作:
[self performSegueWithIdentifier:"pushToMyVC" sender:self];
或者,如果您不想执行Segue,您可以实例化目标视图控制器,然后手动推送到该视图控制器。您需要做的就是确保目标视图控制器在Interface Builder中具有自己的“故事板ID”,然后您就可以:
UIViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"DestinationController"];
[self.navigationController pushViewController:controller animated:YES];
你说了“push”(因此我在上面使用了
pushViewController
)。如果你真的想“呈现一个模态视图控制器”,那么第二行代码是:
[self presentViewController:controller animated:YES completion:nil]
正如您所看到的,您不必使用 prepareForSegue
来推送到新场景。只有在想要将信息传递到目标视图控制器时才使用 prepareForSegue
。否则它是不必要的。
显然,如果您没有使用storyboard(例如,您正在使用NIB),那么过程完全不同。但我假设您没有使用NIB,因为 prepareForSegue
在该环境中不适用。但如果您使用的是NIB,则如下:
SecondViewController *controller = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
[self.navigationController pushViewController:controller animated:YES];