繁体   English   中英

如何在使用Storyboard解除模态视图控制器之前推送viewController?

[英]How to push a viewController before dismissing modal view controller with Storyboards?

在为我的一个项目试用故事板时,我遇到了一些我没有很好解决方案的东西;

我有一个基于导航的应用程序,它显示了一个UITableViewController。 tableView使用用户创建的元素填充。 点击元素单元格会调出详细视图控制器。 用户可以通过点击tableView中的按钮来创建新元素。 这将打开一个模态视图,它将处理创建。

现在,当用户完成创建元素并解除模态视图控制器时,我希望用户看到相应的新细节视图控制器而不是tableview。 但我无法弄清楚如何在故事板中实现这一目标。

有没有人有这个好的模式?

现在的情况

TableView --(tap create)--> creation modal view --(finish creating)--> TableView

应该

TableView --(tap create)--> creation modal view --(finish creating)--> detail view

您可以将创建视图控制器放在导航控制器中,并将创建视图控制器链接到详细视图控制器以及推送segue。 完成数据创建后,它将指向详细视图控制器的实例。

如果要从详细信息视图直接导航回到表视图,可以向详细信息视图控制器添加属性,例如@property (nonatomic) BOOL cameFromCreationViewController; 您可以在prepareForSegue:设置此属性prepareForSegue:在源视图控制器中。 在详细信息视图中,创建自己的后退按钮,当它被点击时,您可以执行以下操作:

if(self.cameFromCreationViewController){
     [self.presentingViewController dismissViewController];
}
else {
     [self.navigationController popViewController]
}

我能提出的最佳模式与代码中的旧模式相同。

将属性(nonatomic, weak) UINavigationController *sourceNavigationController到模态视图控制器。 当它成为解散模态视图控制器的时候,添加以下代码:

DetailViewController *detailViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];
detailViewController.element = newlyCreatedElement;
[[self sourceNavigationController] pushViewController:detailViewController animated:NO];

并确保sourceNavigationController得到正确设置,添加在下面的代码prepareForSegue:在TableView中的:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM