我想向用户显示一个文本,告知数据源中没有内容。例如,如果你没有联系人,你可以在联系人应用程序中看到这种行为,它在表格中间用灰色文本表示。有没有简单的方法来做这个或我必须使用一些技巧,如创建空单元格或东西..谢谢!
答案 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
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:
答案 4 :(得分:0)
请查看here
我建议您注意DZNEmptyDataSet,StatefulViewController,UIEmptyState和StatusProvider
但是这些lib很大,在大多数情况下你可以使用@Pablo Ruan的答案