在没有使用故事板的情况下,以编程方式转换到UINavigation控制器

3

我有一些使用Storyboards进行转场的代码,如下所示:

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

但我希望能以编程的方式完成。我有一个名为myViewController的类,当我点击按钮时,我想要进行动画并推到我的myUINavigationController。

这个如何以编程的方式实现?


也许你可以在这个主题中找到关于你的问题的答案:http://stackoverflow.com/questions/18711668/first-method-after-touching-a-table-view-cell-didselectrowatindexpath-or-prepare/18711785#18711785 - Sergey Demchenko
self.navigationController pushViewController... animated:YES自身导航控制器pushViewController...动画:YES - Calin Chitu
2个回答

10

首先,转场不能在程序中动态创建。当执行时,它是由故事板运行时创建的。但是,您可以通过调用performSegueWithIdentifier:来触发已经在接口构建器中定义好的转场。

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

- (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];
}

5
首先,只有在您拥有一个将处理导航(推送、弹出等)的UINavigationController时,才能使用segue
因此,如果您有一个UINavigationController,并且想要在不使用segue的情况下将另一个UIViewController推送到堆栈中,则可以使用pushViewController:animated:方法,它也具有反向的popViewControllerAnimated:。 此外,UINavigationController提供了其他添加/删除UIVIewControllers的方法,有关更多信息,请参见UINavigationController类参考。

1
如何使我的起始应用程序视图控制器滑动到导航控制器?就像我想要一个没有工具栏的起始页面,然后用户点击注册并将其动画化为带有返回按钮的注册视图。 - cdub
请查看有关呈现模态视图控制器的文档。https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html - mkubilayk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接