我有2个ViewControllers:ControllerA
和ControllerB
在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
重新加载了所有数据,文本框中的所有内容都为空。
我读了很多相似的案例,但不明白我是如何解决这个问题的。
我找到的选项:
ControllerB
之前保存数据,然后返回ControllerA
检查已保存的数据并加载它。我该怎么做呢?? (似乎乏味)。ControllerA
不会从内存中删除,并且当用户从ControllerB
返回时就会存在。我更喜欢这样做以保持简单(我知道记忆演讲)。任何帮助?
答案 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从未出现,则无法恢复,字典将为空。这意味着您不需要测试是否要恢复;您可以无条件地输入该代码路径。