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

cdu*_*dub 3 uiviewcontroller uinavigationcontroller ios ios6

我有使用Storyboard进行seques的代码,如下所示:

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

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

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

mku*_*ayk 10

首先,不能以编程方式创建segue.它是由故事板运行时创建的.但是,您可以通过调用触发已在接口构建器中定义的segue performSegueWithIdentifier:.

除此之外,您可以确保在没有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];
}
Run Code Online (Sandbox Code Playgroud)


dan*_*ata 5

首先,segue只有你有一个UINavigationController能处理导航(推,弹等)的东西才能使用.

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