在UITableViewController中处理空的UITableView

时间:2010-03-22 05:49:16

标签: iphone uitableview

我有一个填充了一些数据的UITableViewController。如果数据返回空,显然表是空的。使用什么方法来处理这种情况并使用“无数据可用”的UILabel之类的东西。

我一直在使用- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section,但事实证明它有点麻烦,我不再相信它是最好的地方。

3 个答案:

答案 0 :(得分:5)

我可能会稍微改变一下哲学,只在内容可用时显示UITableView,并让UIView在内容准备好之前显示“无内容”可用图像。

一旦内容被提取并准备好呈现 - 通过“无内容”图像动画或创建UITableView到视图层次结构中,并要求它重新加载其数据。这将使它开始通过它的数据源委托回调。

至少这样你就不必担心显示没有数据的tableview,并将问题与UITableViewDataSource回调方法混合。

答案 1 :(得分:1)

为什么不在表空为止时将UITableView的backgroundView属性更改为适当的属性?您可以在为tableView加载或重新加载Data时随时更新backgroundView属性。 backgroundView的大小自动调整为tableView的大小,您可以自定义它以获得空白案例所需的任何图片,文本和控件。

答案 2 :(得分:1)

当没有数据时,我只是隐藏了tableview。只需将UITableView子类化并覆盖reloadData。您还可以相应地显示/隐藏文本标签,以显示无可用数据。

- (void)reloadData {
    [super reloadData];
    BOOL dataPresent = FALSE;
    int sections = [self.dataSource respondsToSelector:@selector(numberOfSectionsInTableView:)] ? [self.dataSource numberOfSectionsInTableView:self] : 1;
    for (int i = 0; i < sections; i++) {
        if ([self.dataSource tableView:self numberOfRowsInSection:i] > 0) {
            dataPresent = TRUE;
            break;
        }
    }
    self.hidden = !dataPresent;
    return;
}