我的代码使用故事板进行seques,如下所示:
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"ShowDiagnosis"])
{
[segue.destinationViewController setHappiness:self.diagnosis];
}
...
但我想以编程方式进行。我有myViewController类,当我点击一个按钮时,我想动画并推送到myUINavigationController。
这是如何以编程方式完成的?
答案 0 :(得分:10)
首先,不能以编程方式创建segue。它是由故事板运行时创建的。但是,您可以通过调用performSegueWithIdentifier:
来触发已在界面构建器中定义的segue。
除此之外,您可以确保在没有segue对象的视图控制器之间提供转换。在相应的操作方法中,通过以编程方式分配或使用其标识符从storyboard实例化来创建视图控制器实例。然后,将其推送到导航控制器。
- (void)buttonClicked:(UIButton *)sender
{
MyViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"my-vc-identifier"];
// OR MyViewController *vc = [[MyViewController alloc] init];
// any setup code for *vc
[self.navigationController pushViewController:vc animated:YES];
}
答案 1 :(得分:5)
首先,segue
只能用于处理导航(推送,弹出等)的UINavigationController
。
因此,如果你有一个UINavigationController
并且想要在不使用UIViewController
的情况下在堆栈上推送另一个segue
,则可以使用pushViewController:animated:
方法,该方法也具有反向{ {1}}。此外,popViewControllerAnimated:
还提供了添加/删除UINavigationController
的其他方法,以获取更多信息检查UINavigationController class reference.