【问题标题】:How to push a viewController before dismissing modal view controller with Storyboards?如何在使用 Storyboard 关闭模式视图控制器之前推送 viewController?
【发布时间】:2013-04-29 07:09:15
【问题描述】:

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

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

现在,当用户完成创建元素并关闭模态视图控制器时,我希望用户看到相应的新细节视图控制器而不是表格视图。但我不知道如何在情节提要中实现这一点。

有人对此有好的模式吗?

现状

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

应该是

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

【问题讨论】:

  • 在下面添加了我自己的答案。任何可以用故事板做到这一点的更好的模式仍然值得赞赏。

标签: ios objective-c uinavigationcontroller modalviewcontroller uistoryboard


【解决方案1】:

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

如果您想从详细信息视图直接导航回表格视图,您可以向详细信息视图控制器添加一个属性,例如@property (nonatomic) BOOL cameFromCreationViewController;。您可以在源视图控制器的prepareForSegue: 中设置此属性。在详细信息视图中制作您自己的后退按钮,当点击它时,您可以这样做:

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

【讨论】:

    【解决方案2】:

    我能想到的最佳模式与代码中的旧模式相同。

    将属性(nonatomic, weak) UINavigationController *sourceNavigationController 添加到模态视图控制器。当需要关闭模态视图控制器时,添加以下代码:

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

    为了确保sourceNavigationController 设置正确,在TableView 的prepareForSegue: 中添加以下代码:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-22
      • 1970-01-01
      • 1970-01-01
      • 2019-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-17
      相关资源
      最近更新 更多