iPhone / UIViewController:当从视图导航时,处理数据条目的最佳方法是什么

时间:2010-07-21 00:48:54

标签: iphone cocoa-touch uiviewcontroller uinavigationcontroller uinavigationitem

我现在应该知道这一点,但我仍然有点困惑。当我的应用程序从一个视图控制器导航到下一个视图控制器(通过导航控制器)时,我希望在进入下一个VC之前“完成”当前VC的数据。我看到拦截“页面交换”的唯一方法是[旧视图viewWillDisappear] - > [newView viewWillAppear]转换。这看起来很奇怪,不过我觉得它还可以。

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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文档。

这样可以将逻辑保存在一个位置,而不是在每个视图控制器中展开。

相关问题