这是一个简单的问题。我在导航控制器中有一个表视图。当我触摸一个单元格时,它会推送一个带有来自该单元格的信息的视图控制器,这样我就可以在新的视图中编辑它。现在工作正常了(我们可以称它为信息路径:"rootviewcontroller -> pushed“)。但是,当我在新视图中单击保存时,我希望在调用popviewcontroller (信息路径:"pushed -> rootviewcontroller")之前,编辑的值返回到rootviewcontroller,这样编辑后的值就可以显示在表视图中。
对此的正确方法是什么?
编辑:
pushViewController和popViewController工作正常。我只询问了在调用保存按钮(popViewController)时,将编辑后的信息返回到rootViewController以便在表视图中显示的最佳方法。我想我只能直接从推送的viewController中用新信息编辑pList。不过,我更喜欢将新信息发送到rootViewController,并让它处理对pList文件的访问。
发布于 2010-11-22 19:00:43
我也有同样的情况--两个表视图。第一个TV显示数据库记录的列表,当点击其中一个记录时,它将进入第二个TableView,后者显示记录的详细信息。为此,我将details TableViewController推送到导航控制器堆栈上。到目前为止,一切都很简单。
我遇到的问题是,在更新详细信息表视图(控制器)中的记录之后,我想让列表表视图控制器知道,以便它可以更新记录列表。
我做的第一件事是向details表视图控制器添加一个属性,以便当在记录列表上选择一行时,list控制器可以将核心数据托管实体传递给details控制器。
同时,我还添加了list控制器作为核心数据更改事件的观察者,如下所示:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dataSaved:) name:NSManagedObjectContextDidSaveNotification object:nil];因此,如果详细信息表视图和控制器更新了记录,则list控制器将通过传递NSNotification对象来调用它的dataSaved:方法。
在dataSaved:方法中,我检查对象,如果正在编辑的核心数据实体在更新列表中,那么我设置一个标志,表示需要更新。但是,如果在插入的列表中有一条记录,则意味着已经创建了一条新记录并将其插入到数据库中,因此设置了一个标志来触发列表表视图的完全重新加载。
当用户返回到列表视图控制器时,将触发viewDidAppear:方法。在此方法中,我检查标志并调用
- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation如果记录已更新,则重新加载特定记录;如果插入了新记录,则通知表视图执行完全重新加载。
最后,我删除了作为核心数据通知观察者的列表控制器,因为它不再感兴趣。
我不知道这是否是推荐的方法,但到目前为止,它对我来说是有效的。
发布于 2010-11-22 18:05:36
您可以尝试在popViewController之前使用reloadData,但您应该发布一些代码。
发布于 2010-11-22 18:06:02
所有的UIViewControllers都有一个navigationController方法。当您将视图控制器推送到导航控制器时,该属性被设置为指向导航控制器。
因此,只需在视图控制器中调用[self.navigationController popViewControllerAnimated:YES];。
另外,不要混淆视图和视图控制器。当您在视图中单击save时,您应该确保save按钮调用视图控制器上的一个方法,该方法反过来与导航控制器对话。
https://stackoverflow.com/questions/4244213
复制相似问题