在另一个视图控制器被关闭后停止视图控制器重新加载

时间:2015-11-14 18:39:42

标签: ios objective-c uiviewcontroller

我有2个ViewControllers:ControllerAControllerB

ControllerA上,有许多用户可能已填写的tableView和输入框。从ControllerA用户可以点击按钮启动ControllerB,如下所示:(我没有使用NavigationController)

UIStoryboard *storyBorad = [UIStoryboard storyboardWithName: @"Main_iphone" bundle:nil];
UIViewController *secondController = [Storyboard instantiateViewControllerWithIdentifier:@"ControllerB"];
[self presentViewController: secondController animated: YES completion: nil];

ControllerB中,用户可以点击关闭按钮,并执行以下代码:

[self dismissViewControllerAnimated:YES completion:nil];

用户返回上一个ControllerA,但我看到ControllerA重新加载了所有数据,文本框中的所有内容都为空。

我读了很多相似的案例,但不明白我是如何解决这个问题的。

我找到的选项:

  1. 在转到ControllerB之前保存数据,然后返回ControllerA检查已保存的数据并加载它。我该怎么做呢?? (似乎乏味)。
  2. 找到某种方式ControllerA不会从内存中删除,并且当用户从ControllerB返回时就会存在。我更喜欢这样做以保持简单(我知道记忆演讲)。
  3. 任何帮助?

2 个答案:

答案 0 :(得分:0)

如果要保留字段中的数据,则需要推送而不是以模态方式呈现VC。

使用VC创建导航控制器和init,然后将VC显示为:

   UIStoryboard *storyBorad = [UIStoryboard storyboardWithName: @"Main_iphone" bundle:nil];
   UIViewController *secondController = [Storyboard instantiateViewControllerWithIdentifier:@"ControllerB"];

   UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:firstViewController];

   [navController pushViewController:secondController animated:YES];

在这种情况下,当您单击后退按钮时,您将被带回到之前的VC,并且您不会丢失任何数据!!!!

如果您不希望有后退按钮,则可以隐藏导航栏,如果您想要关闭secondController,则只需致电:

     [self.navigationController popViewControllerAnimated:YES];

当您离开VC时,请确保不要清除字段中的所有数据! (如果数据是否为零,请务必检查viewDidDisappear/viewWillDisappear

答案 1 :(得分:0)

视图是存储您关注的数据的错误位置。发生了什么是在呈现B时正在卸载控制器A的视图。如果您想确保保留用户更改,则必须自己完成。

一种简单的技术是使用NSMutableDictionary来保存数据。在呈现B之前填写字典,并在viewWillAppear中,从字典中填充您的视图。如果B从未出现,则无法恢复,字典将为空。这意味着您不需要测试是否要恢复;您可以无条件地输入该代码路径。