Empty UITableView仍显示空单元格

时间:2015-03-24 09:02:26

标签: ios objective-c uitableview calendar

我正在创建一个日历应用,我正在UITableView中显示日历中的事件。 当表为空时,我使用tableFooterView隐藏UITableView中的分隔线。我使用以下代码执行此操作:

self.tableView.tableFooterView = [[UIView alloc] init];
UILabel *footerTableViewLabel = [[UILabel alloc] init];
footerTableViewLabel.text = @"No items.";
[self.tableView.tableFooterView addSubview:footerTableViewLabel];

如果表格中有元素,我会隐藏此视图,如果没有,我会显示它。如果日历最初为空,这可以正常工作。但是,如果我在我的应用程序仍在后台运行时从Calendar.app中删除了一个事件,那么当我回到应用程序时,我看到的只是一堆空单元格和分隔符,没有标签说"否项"

有什么想法吗?

编辑:我使用以下方式显示/隐藏页脚视图:

self.tableView.tableFooterView.hidden = NO/YES;

就考虑事件而言,我不提供直接从我的应用程序中删除它们的可能性,我只是检测它们何时从Calendar.app中删除。不幸的是,我无法显示执行此检测的代码,因为它是私有库的一部分,但是,这样可以正常工作,即在删除事件时跳转到正确的代码部分。

3 个答案:

答案 0 :(得分:0)

您可以在代码中尝试隐藏分隔符:self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

答案 1 :(得分:0)

使用self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;隐藏分隔线。如果您希望活动的tableview单元格具有分隔符,则可以使用如下函数手动将边框添加到每个单元格的底部:

- (void)addBottomBorderWithColor:(UIColor *)color andHeight:(CGFloat) borderHeight
{
    CALayer *borderBottom = [CALayer layer];
    borderBottom.backgroundColor = color.CGColor;
    borderBottom.frame = CGRectMake(0, self.frame.size.height, self.frame.size.width, borderHeight);
    [self.layer addSublayer:borderBottom];
}

**编辑** 如果要添加一个指示“无数据”的视图,请尝试将其添加为tableview下面的视图,然后在没有数据时将tableview设置为hidden。

希望这有帮助

答案 2 :(得分:0)

所以,我终于设法解决了这个问题。有问题:

  1. 出于某种原因(可能是[self.tableView reloadData]),self.tableView.tableFooterView会变为零,这就是我看到空单元格的原因。将视图重新分配给它修复了此问题。

  2. 我必须更新页脚视图及其包含的标签的视图约束。