我有一个有UITabBarController
的应用。
我想要实现的是,如果数组属性中有项目(从CoreData加载),或者UIImageView
(包含有关如何添加项目的更多信息),TabBar中包含的第一个ViewController将显示一个TableView如果没有。
如果用户转到另一个TabBarItem,并返回第一个TabBarItem,则可能已填充该数组。所以它应该相应地改变显示的内容。 有人可以发布一个程序片段来实现这一目标。我尝试了几件事,但都没有正常工作。
答案 0 :(得分:0)
[self performSelectorInBackground:@ selector(loadRecentInBackground)withObject:nil];
然后定义选择器
- (void) loadRecentInBackground{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
// Define put the values into the data structure that you retrieve
// (I use an NSMutableDictionary)
[pool release];
}
并从
中的字典中检索值- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
并确保添加:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
您返回数据结构的计数。
答案 1 :(得分:0)
最简单的方法是根据数组是否填充来设置标志。然后调整表以显示数据行或显示带有指令的UIImageView的单行。
最好根据-viewWillDisplay
,– tableView:heightForRowAtIndexPath:
和– tableView:willDisplayCell:forRowAtIndexPath:
的标记返回正确的值,以– numberOfSectionsInTableView:
和表格格式设置标记。
答案 2 :(得分:0)
此代码完成工作
- (void)loadView {
UIView* aView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
//tableView
self.tableView = [[[UITableView alloc ] initWithFrame:CGRectMake(0,0,320,460) style:UITableViewStylePlain] autorelease];
self.tableView.backgroundColor = [UIColor clearColor];
self.tableView.autoresizingMask = (UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight);
self.tableView.delegate = self;
self.tableView.dataSource = self;
self.tableView.autoresizesSubviews = YES;
[aView addSubview: tableView];
self.view = aView;
[aView release];
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self loadData];
//Display or remove Image depending on the ammount of results.
if ([self.itemsArray count] == 0) {
NSLog(@"No Items in Array");
if (noDataImageView == nil) {
noDataImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"NoDataBackground.png"]];
[self.view addSubview:noDataImageView];
}
}else{
if(noDataImageView != nil){
[noDataImageView removeFromSuperview];
}
}
}
- (void)dealloc {
[super dealloc];
[tableView release];
[noDataImageView release];
}