根据数组的大小更改self.view

时间:2010-01-21 22:09:29

标签: iphone

我有一个有UITabBarController的应用。 我想要实现的是,如果数组属性中有项目(从CoreData加载),或者UIImageView(包含有关如何添加项目的更多信息),TabBar中包含的第一个ViewController将显示一个TableView如果没有。

如果用户转到另一个TabBarItem,并返回第一个TabBarItem,则可能已填充该数组。所以它应该相应地改变显示的内容。 有人可以发布一个程序片段来实现这一目标。我尝试了几件事,但都没有正常工作。

3 个答案:

答案 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];
}