如果rowsInSection = 0,则从tableview中删除部分

时间:2014-02-24 09:00:04

标签: ios objective-c uitableview

我的UITableView中有几个部分,有时可以有0行。如果numberOfRowsInSection等于0,我该如何删除节头?

以下是我的部分代码:

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, 22)];
    /* Create custom view to display section header... */
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(60, 0, tableView.frame.size.width, 22)];
    [label setFont:[UIFont boldSystemFontOfSize:14]];
    [label setTextColor:[UIColor whiteColor]];
    NSString *string =[[theLeagueArray objectAtIndex:section] objectForKey:@"league"];
    [label setText:string];
    [view addSubview:label];

    UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 32, 22)];
    [imgView setImage:[UIImage imageNamed:[[theLeagueArray objectAtIndex:section] objectForKey:@"img"]]];
    [view addSubview:imgView];

    [view setBackgroundColor:[UIColor colorWithRed:13/255.0f green:78/255.0f blue:102/255.0f alpha:1.0f]];

    return view;
}

4 个答案:

答案 0 :(得分:0)

尝试deleteSections:withRowAnimation:方法。这将使用可选动画将其从视图中删除,而不会影响您的后备数据。 (但是,您应该更新数据,以便不再出现该部分。)

请检查UITableView class reference

答案 1 :(得分:0)

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    // If array count 0
        if([[workoutarray objectAtIndex:section] count]==0)
        {
            return nil;
        }
        else {


        }
}
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
     // If array count 0
    if([[workoutarray objectAtIndex:section] count]==0)
        {
            return 0;
        }
        else
        {
            return 25;
        }        
}

答案 2 :(得分:0)

基本上,正确的方法是在表视图上执行deleteSections:withRowAnimation:,不要忘记更新数据源。

但是你也可以返回UIView高度为0.1(它有点黑客),所以在这种情况下它对用户是不可见的。要更新部分,请执行reloadSections:withRowAnimation:方法。 它看起来像这样:

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    if ([tableView numberOfRowsInSection:section] == 0) {
        return [[UIView alloc] init];
    }
... 
}

答案 3 :(得分:0)

查看tableView:heightForHeaderInSection:的参考文档,并在需要隐藏节标题时返回0(同样在tableView:viewForHeaderInSection:中返回nil以减少总计算次数。)

此外,如果你定位iOS 7,你可以使用新的tableView:estimatedHeightForHeaderInSection:进行更多优化。