0

我现在应该知道这一点,但我仍然有点困惑。当我的应用程序从一个视图控制器导航到下一个视图控制器(通过导航控制器)时,我想在转到下一个 VC 之前“完成”当前 VC 的数据。我看到拦截“页面交换”的唯一方法是在 [old view viewWillDisappear] -> [newView viewWillAppear] 转换中。这似乎很奇怪,尽管我想它可以正常工作。

这真的是处理导航转换的正确方法吗?我的应用程序是一堆 VC,它们共同构建了一个数据库文件。每个 VC 处理数据的不同方面。

4

2 回答 2

0

“最终确定”部分究竟涉及什么?我假设您在视图控制器中为各种字段存储了一些状态,然后您想在进入下一个视图之前将其写入数据库文件?

当谈到“编辑视图控制器”时,我发现一个很好的方法是让视图控制器直接写入一个简单的模型对象,该模型对象在将其推送到导航控制器之前通过属性注入。

所以像:

/* Somewhere in the app delegate, like application:didFinishLaunching */
DatabaseFileModel *model = ...;

viewController1.model = model;
viewController2.model = model;

/* ... */

[self.window makeKeyAndVisible];

然后每个视图控制器通过设置属性等在文本字段结束编辑时写入该模型。让视图控制器直接写入对象意味着您不需要处理 viewWillDisappear 等。

如果您仍然需要这样做,但是您可以向导航控制器添加一个委托并处理这两种方法:

– navigationController:willShowViewController:animated:
– navigationController:didShowViewController:animated:

有关更多信息,请参阅UINavigationControllerDelegate文档。

这将使您将逻辑保留在一个地方,而不是分散在每个视图控制器中。

于 2010-07-21T10:10:16.020 回答
0

我不知道你的确切设置,所以这可能对你没有用,但我在保存数据方面有很好的经验-(void)textFieldDidEndEditing:(UITextField*)tftf.tag用于索引字段。从那里我将数据提交到存储类,并且不用担心 UI 中发生的事情。

于 2010-07-21T01:20:22.123 回答