在为我的某个项目试用故事板时,我遇到了一些我没有很好解决方案的事情;
我有一个基于导航的应用程序,它显示了一个UITableViewController。 tableView使用用户创建的元素填充。点击元素单元格会调出详细视图控制器。用户可以通过点击tableView中的按钮来创建新元素。这将打开一个模态视图,它将处理创建。
现在,当用户完成创建元素并解除模态视图控制器时,我希望用户看到相应的新细节视图控制器而不是tableview。但我无法弄清楚如何在故事板中实现这一点。
有没有人有这个好的模式?
现状
TableView --(tap create)--> creation modal view --(finish creating)--> TableView
应
TableView --(tap create)--> creation modal view --(finish creating)--> detail view
答案 0 :(得分:1)
您可以将创建视图控制器放在导航控制器中,并将创建视图控制器链接到详细视图控制器以及推送segue。完成数据创建后,它将指向详细视图控制器的实例。
如果要从详细信息视图直接导航回到表视图,可以向详细信息视图控制器添加属性,例如@property (nonatomic) BOOL cameFromCreationViewController;
。您可以在源视图控制器中的prepareForSegue:
中设置此属性。在详细信息视图中,创建自己的后退按钮,当它被点击时,您可以执行以下操作:
if(self.cameFromCreationViewController){
[self.presentingViewController dismissViewController];
}
else {
[self.navigationController popViewController]
}
答案 1 :(得分:0)
我能想出的最佳模式与代码中的旧模式相同。
将属性(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];
}
}