3

我有使用情节提要进行序列化的代码,如下所示:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"ShowDiagnosis"])
    {
        [segue.destinationViewController setHappiness:self.diagnosis];
    }
    ...

但我想以编程方式进行。我有 myViewController 类,当我单击一个按钮时,我想制作动画并推送到 myUINavigationController。

这是如何以编程方式完成的?

4

2 回答 2

10

首先,不能以编程方式创建 segue。它是由情节提要运行时在执行时创建的。但是,您可以通过调用performSegueWithIdentifier:.

除此之外,您当然可以在没有 segue 对象的情况下提供视图控制器之间的转换。在相应的操作方法中,通过以编程方式分配或使用其标识符从情节提要实例化来创建您的视图控制器实例。然后,将其推送到您的导航控制器。

- (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];
}
于 2013-09-13T07:54:43.833 回答
5

首先,segue只有当您有一个UINavigationController可以处理导航(推送、弹出等)的情况下才能使用。

因此,如果您有 aUINavigationController并且您想UIViewController在不使用的情况下将另一个压入堆栈,segue那么您可以使用pushViewController:animated:也具有 reverse 的方法popViewControllerAnimated:。还UINavigationController提供了其他添加/删除方法UIVIewControllers,更多信息请查看UINavigationController 类参考。

于 2013-09-13T07:39:48.917 回答