如何从StoryBoard中设计的UITableView中删除静态单元格

Mar*_*arc 26 iphone storyboard uitableview

解决方案可能很简单,但我不能找到它......!

使用故事板(iOS 5),我有一个tableViewController设计的STATIC桌面视图,包含5个部分,每个部分内部都有不同的静态单元格.

我的问题是:如何以编程方式删除单元格viewWillAppear

例如,我有一个专为日期设计的单元格

IBOutlet UITableViewCell * cellForDate;
Run Code Online (Sandbox Code Playgroud)

并且......如果没有日期,我想删除我的手机.

cellForDate.hidden = true; //Hide the cell, but leave a blank space
Run Code Online (Sandbox Code Playgroud)

我试过[tableView deleteRowsAtIndexPaths...]没办法

有人有个主意吗?

mac*_*die 35

试图隐藏电池示在它之前,在UITableViewDelegatetableView:willDisplayCell:forRowAtIndexPath:方法.这是你可以操纵细胞外观的最终方法.但是这不会删除单元格应该占用的空间,因此您可以尝试的另一件事是使用tableView:heightForRowAtIndexPath:相同协议的方法将单元格行的高度设置为0 .

另一种最健壮的方法是设计一种方法,用于确定是否需要该部分中的日期单元格,并根据结果返回该部分中的正确行数,并返回其他部分行单元格.帐户.然后在viewWillAppear上重新加载tableView的数据.


ima*_*747 26

希望这是一个通用的解决方案,但它仍然不完美

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [super tableView:tableView cellForRowAtIndexPath:indexPath];
    if (cell.hidden) {
        return 0;
    } else {
        return [super tableView:tableView heightForRowAtIndexPath:indexPath];
    }
}
Run Code Online (Sandbox Code Playgroud)

使用此方法,您可以将IBOutlet绑定单元格设置为隐藏,然后当表格尝试显示行时,它首先检查是否应隐藏单元格(使用超级调用来获取单元格),如果是,则返回高度为0,有效地将其从列表中删除.如果不应该隐藏单元格,那么它从超级单元获得高度,因此通常发生的任何事情仍然会发生.

唯一的问题是,开始和结束单元格负责列表或组顶部和底部的分隔符.因此,如果隐藏组中的最后一个单元格,则组中的底部分隔符将略微像在正常行而不是全宽度上一样.如果您隐藏顶行或底行并且您正在使用分隔符并且您关心完全标准显示,则这只是一个问题.在我的情况下,最好的解决方案是不隐藏顶行或底行.我将可能隐藏的任何内容移动到组的中间.或者,您可以接受它不是很标准,或禁用表上的行分隔符.


Hen*_*nry 13

斯威夫特3

override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    if indexPath.section == 0 {
        cell.isHidden = true
    }
}

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if indexPath.section == 0 {
        return 0
    } else {
        return super.tableView(tableView, heightForRowAt: indexPath)
    }
}
Run Code Online (Sandbox Code Playgroud)