在没有故事板的情况下以编程方式选择UINavigation控制器

时间:2013-09-13 06:58:37

标签: ios ios6 uiviewcontroller uinavigationcontroller

我的代码使用故事板进行seques,如下所示:

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

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

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

2 个答案:

答案 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.