如果数据源为空,则为tableview的占位符文本

时间:2011-03-07 21:53:49

标签: ios uitableview uikit

我想向用户显示一个文本,告知数据源中没有内容。例如,如果你没有联系人,你可以在联系人应用程序中看到这种行为,它在表格中间用灰色文本表示。有没有简单的方法来做这个或我必须使用一些技巧,如创建空单元格或东西..谢谢!

5 个答案:

答案 0 :(得分:8)

没有(AFAIK)任何内置方式让表视图在空时显示消息。如果数据源为空,则tableView:numberOfRowsInSection:可以返回1 tableView:cellForRowAtIndexPath:返回“虚拟”单元格,表示没有数据。或者您可以添加自己的视图来显示相应的消息,完全忽略(空)表视图。

答案 1 :(得分:7)

这是一个简短而又甜蜜的解决方案。

第一步,在UITableViewController初始化中,添加:

UILabel *placeholder = [[UILabel alloc] init];
placeholder.font = [placeholder.font fontWithSize:20];
placeholder.numberOfLines = 0; // Use as many lines as needed.
placeholder.text = NSLocalizedString(@"Your text here", nil);
placeholder.textAlignment = NSTextAlignmentCenter;
placeholder.textColor = [UIColor lightGrayColor];

placeholder.hidden = YES; // Initially hidden.
[self.tableView addSubview:placeholder];

self.placeholder = placeholder; // You'll need a reference to the placeholder.

第二步,在你的UITableViewController中,添加:

- (void)viewWillLayoutSubviews
{
    [super viewWillLayoutSubviews];

    self.placeholder.frame = self.tableView.bounds;
}

最后一步,在需要时显示/隐藏占位符。

更好的解决方案是不使用UITableViewController。只需将一个tableView添加到UIViewController,并将占位符视图添加到tableView上方的UIViewController。使用“自动布局”使占位符垂直和水平居中。最后,在需要时显示/隐藏占位符。

你们对这个解决方案有什么看法?请评论。

答案 2 :(得分:4)

在Swift 2.0中

在日历下方,我有一个tableview

disregard the calendar

func TabelaSemDados(Array:NSArray){
    if Array.count == 0 {
        tableView.tableFooterView = UIView(frame: CGRect.zero)
        tableView.backgroundColor = UIColor.clearColor()

        var label = UILabel()
        label.frame.size.height = 42
        label.frame.size.width = tableView.frame.size.width
        label.center = tableView.center
        label.center.y = (tableView.frame.size.height/2)
        label.numberOfLines = 2
        label.textColor = UIColor.grayColor()
        label.text = "No Data Text"
        label.textAlignment = .Center
        label.tag = 1

        self.tableView.addSubview(label)
    }else{
        self.tableView.viewWithTag(1)?.removeFromSuperview()
    }
}

调用viewdidapper:

override func viewDidAppear(animated: Bool) {
    TabelaSemDados(self.Agenda)
}

答案 3 :(得分:1)

我写了three different approaches in my blog

  • 使用Anomie描述的简单解决方案:在数据源方法中使用条件。
  • 使用“神奇的”所有类别UITableView+NXEmptyView
  • 为特殊情况使用单独的数据源类(空,加载......)。

答案 4 :(得分:0)

请查看here

我建议您注意DZNEmptyDataSetStatefulViewControllerUIEmptyStateStatusProvider

但是这些lib很大,在大多数情况下你可以使用@Pablo Ruan的答案