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

Posted

技术标签:

【中文标题】如果 rowsInSection = 0,则从 tableview 中删除部分【英文标题】:Remove section from tableview if rowsInSection = 0 【发布时间】:2014-02-24 09:00:04 【问题描述】:

我的 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;

【问题讨论】:

***.com/questions/9737616/… 将您的行数代码放在此处 您可以使用 UITableViewDataSource - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;并在数据发生任何变化后使用 reload tableview 【参考方案1】:

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

此外,如果您以 ios 7 为目标,您可以使用新的 tableView:estimatedHeightForHeaderInSection: 进行更多优化。

【讨论】:

【参考方案2】:

试试deleteSections:withRowAnimation: 方法。这将使用可选动画将其从视图中移除,而不会影响您的支持数据。 (但是,无论如何,您都应该更新数据,以免该部分再次出现。)

请查看UITableView class reference

【讨论】:

【参考方案3】:

基本上,正确的做法是在表格视图上执行deleteSections:withRowAnimation:,并且不要忘记适当地更新数据源。

但您也可以返回高度为 0.1 的 UIView(这有点骇人听闻),因此在这种情况下用户将看不到它。要更新部分,请执行reloadSections:withRowAnimation: 方法。 它看起来像这样:

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

    if ([tableView numberOfRowsInSection:section] == 0) 
        return [[UIView alloc] init];
    
... 

【讨论】:

【参考方案4】:
-(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;
                

【讨论】:

以上是关于如果 rowsInSection = 0,则从 tableview 中删除部分的主要内容,如果未能解决你的问题,请参考以下文章

如果该行具有超过 1 个相同的值/重复,则从选择中排除行

如果存在与数据中的某些条件匹配的另一行,则从pandas DataFrame中查找行

如果值不存在,则从其他列插入 id 或 NULL

如果索引列不同,则从一列中求和值?

Pandas:如果条件[重复],则从另一列更新列值

如果是索引页,则从路径中删除#。