0

一个简单的问题。我在导航控制器中有一个表格视图。当我触摸一个单元格时,它会推送一个包含单元格信息的视图控制器,因此我可以在新视图中对其进行编辑。现在工作正常(我们可以将其称为信息路径:“rootviewcontroller -> push viewcontroller”)。但是当我在新视图中单击保存时,我希望在调用 popviewcontroller 之前将编辑的值返回到 rootviewcontroller(信息路径:“pushed viewcontroller -> rootviewcontroller”),因此可以在 tableview 中显示编辑的值。

对此的正确方法是什么?

编辑:

pushViewController 和 popViewController 正在工作。我只要求在调用保存按钮 (popViewController) 时将编辑的信息返回到 rootViewController 以显示在 tableview 中的最佳方法。我想我只需要直接从推送的 viewController 中使用新信息编辑 pList。虽然我更愿意将新信息发送到 rootViewController 并让它处理对 pList 文件的访问。

4

4 回答 4

0

您可以尝试在 popViewController 之前重新加载数据,但您应该发布一些代码。

于 2010-11-22T10:05:36.147 回答
0

所有 UIViewController 都有一个navigationController方法。当您将视图控制器推送到导航控制器时,该属性将设置为指向导航控制器。

所以,只需调用[self.navigationController popViewControllerAnimated:YES];视图控制器。

另外,不要混淆视图和视图控制器。在视图中单击保存时,应确保保存按钮调用视图控制器上的方法,该方法又与导航控制器对话。

于 2010-11-22T10:06:01.990 回答
0

在点击一行时,您将使用适当的信息进入新视图。

在这里您执行一些操作,例如编辑数据。因此,首先单击保存按钮(通过调用 IBAction)保存更改,并在此 IBAction 方法中检查是否(更改已成功保存)然后调用

[self.navigationController popViewControllerAnimated:YES];

并确保表通过更新的数据库重新加载(通过在 viewWillAppear 方法中调用数据库方法来更改数据数组)。

于 2010-11-22T10:14:49.643 回答
0

我有同样的情况 - 两个表视图。第一台电视显示一个数据库记录列表,当点击一个时,它会进入第二个显示记录详细信息的 TableView。我通过将详细信息 TableViewController 推送到导航控制器堆栈来做到这一点。到目前为止,很简单。

我遇到的问题是在详细表视图(控制器)中更新记录后,我想让列表表视图控制器知道,以便它可以更新记录列表。

我做的第一件事是向详细信息表视图控制器添加一个属性,以便在记录列表中选择一行时,列表控制器可以将核心数据托管实体传递给详细信息控制器。

同时,我还添加了列表控制器作为核心数据更改事件的观察者,如下所示:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dataSaved:) name:NSManagedObjectContextDidSaveNotification object:nil];

因此,如果详细信息表视图和控制器更新记录,列表控制器将调用它的dataSaved:方法,传递一个 NSNotification 对象。

dataSaved:我检查对象的方法中,如果正在编辑的核心数据实体在更新列表中,那么我设置一个标志来表示需要更新。但是,如果插入的列表中有记录,则表示已创建新记录并插入到数据库中,因此设置了一个标志以触发列表表视图的完全重新加载。

当用户返回到列表视图控制器时,该viewDidAppear:方法被触发。在这种方法中,我检查标志并调用

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation

如果记录已更新,则重新加载特定记录,或者如果插入新记录,则告诉表视图进行完全重新加载。

最后,我将列表控制器删除为核心数据通知的观察者,因为它不再感兴趣。

我不知道这是否是推荐的方法,但到目前为止它对我有用。

于 2010-11-22T11:00:43.260 回答