在添加子视图关闭时重新加载表视图

时间:2010-09-30 13:19:24

标签: iphone

我在应用程序中有三个对象。有一个UItableviewcontroller(带有nib文件),显示了一个项目列表。一个UIviewcontroller,用于添加项目(带有nib文件)和一个包含项目对象的模型类。

我首先显示项目列表(在应用程序启动时)。我在导航栏上有一个导航按钮,可以在同一个屏幕上弹出添加视图(添加为子视图)(在表格视图中)。在添加视图中,我有一个添加按钮。当我点击添加按钮时,它会添加记录并从表格视图中消失,但不会重新加载。

我在添加项目按钮点击操作

中使用了以下代码
listitem *home= [[listitem alloc] initWithNibName:@"listitem" bundle:nil];
[self.navigationController pushViewController:home animated:YES];
[home viewWillAppear:YES];
[home release];
[self.view removeFromSuperview];

在viewwillappear函数中,我正在从数据库重新加载数据,并使用reloadData重新加载表视图数据。

我做得对吗?我在做什么错误。

1 个答案:

答案 0 :(得分:1)

你的代码阅读起来非常棘手*但这就是我认为你正在做的事情:

每次添加项目时,您都会创建一个新列表。你不想创建一个新的家庭对象,你想回到最后一个?

即。用

替换你的代码
[self.navigationController popViewControllerAnimated:YES];

这将返回原始列表,该列表应该自行刷新(UINavigationController将为您调用viewWillAppear)。

希望有所帮助。


注意您必须使用导航控制器添加“添加项目”视图,否则此代码将无效:(这就是您应该添加项目视图的方式。

AddItem *home = [[AddItem alloc] initWithNibName:@"AddItem" bundle:nil];
[self.navigationController pushViewController:home animated:YES];

这将在添加项目视图上滑动。


如果你想要添加项目视图是一个弹出窗口,那么UINavigationController绝对不是这样做的!

当需要更新自己时,您需要告诉您的初始列表视图。您可以使用委托或通知来执行此操作。在这种情况下,我会去找代表。

您需要将此添加到添加项目视图控制器的代码(AddItem的.h文件)

@interface AddItem : UIViewController {
    UITableViewController *delegate;
}

@property (nonatomic, assign) UITableViewController *delegate;

@end

并在AddItem的.m文件中合成它

@synthesize delegate;

创建添加项视图控制器时,将委托设置为初始视图控制器。即。

AddItem *home= [[AddItem alloc] initWithNibName:@"AddItem" bundle:nil];
home.delegate = self;
home.view.frame = CGRectMake(10, 20, 300, 300);
[self.view addSubview:home.view];

最后,当您添加了一个新项目时,请告诉您的代理人自己刷新:

[delegate reloadData];
[self.view removeFromSuperview];

*标准做法是对类名使用大写字母,即listitem应该称为ListItem。就个人而言,我称之为ItemListViewController,因此很清楚它的作用。