我在应用程序中有三个对象。有一个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重新加载表视图数据。
我做得对吗?我在做什么错误。
答案 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,因此很清楚它的作用。