我想向用户显示文本以通知数据源中没有内容。例如,如果您没有联系人,则可以在联系人应用程序中看到这种行为,并在灰色文本的表格中间显示。有没有简单的方法来做到这一点,或者我必须使用一些技巧,如创建空单元格或其他东西..谢谢!如果数据源为空,则为tableview占位符文本
回答
没有(AFAIK)任何内置方式让表视图在空时显示消息。如果数据源为空,您可以让tableView:numberOfRowsInSection:
返回1,并且tableView:cellForRowAtIndexPath:
返回一个“虚拟”单元,表示没有数据。或者您可以添加自己的视图来显示相应的消息,完全忽略(空)表格视图。
我写了three different approaches in my blog:
- 去与失范所描述的简单的解决方案:在您的数据源方法使用条件。
- 使用“神奇”的全部类别UITableView+NXEmptyView。
- 对于特殊情况(空,加载等)使用单独的数据源类。
下面是一个简短而甜蜜的解决方案。
第一步,在你的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。使用自动布局可使占位符垂直和水平居中。最后,在需要时显示/隐藏占位符。
你们对这个解决方案有什么看法?请给出意见。
这对我来说很完美,在Swift中实现它。但我有个问题。最后一步“在需要时显示/隐藏占位符”。为此,在tableView(_:numberOfRowsInSection:)内部,在返回表格中的行数之前,我已经包含了:'placeholder.hidden = myDataSource.count> 0',并且就像我想要的那样工作,但我想知道它是否包含代码的正确位置。或者,如果该函数仅用于返回行数,而没有额外的代码。 – alondono 2014-11-15 10:02:01
在Swift 2。0
只是日历下面,我有一个实现代码如下
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)
}
这是一个非常干净的解决方案,如果你的tableview不是从左边缘到右边缘,你需要将帧源添加到标签中心 – Johannes 2016-01-18 19:49:18
请看here
我可以建议要你注意在DZNEmptyDataSet,StatefulViewController,UIEmptyState和StatusProvider
但这个库是很大的,在大多数情况下,你可以使用@Pablo Ruan的回答
- 1. Echo占位符,如果字段为空
- 2. IOS:如果UITextField为空,如何获取占位符文本以返回?
- 3. 如何在编辑器为空时添加占位符文本
- 4. 如果资源数据为空,则清除数据透视表
- 5. 如果数据源中的值为空,则删除文本字段?
- 6. 如果按钮文本为空,则
- 7. iOS tableview动画占位符
- 8. 位置占位符文本
- 9. Howto?在TableView中,如果NSMutableArray为空,则显示其他数组
- 10. 即使文本框为空,如何向tableView添加数据?
- 11. 文本作为文本框输入的占位符?
- 12. javascript函数确保文本包含格式为$占位符$
- 13. 显示占位符文本
- 14. MFC CEdit占位符文本
- 15. Thymeleaf占位符=“文本”
- 16. 如果tableview为空,则显示标签和图像
- 17. 为MVC中的文本框的占位符attr提供数据注释
- 18. 如果文本框为空,则使用文本框为单元格添加值
- 19. 如果documentId为空,则创建文档
- 20. 富占位符无法在占位符中输入文本
- 21. 占位符更改数据
- 22. Swift MKMapItem数据源为tableview不工作
- 23. 如何更改占位符文本
- 24. 编辑占位符源文件
- 25. 将字符转换为数字(如果数字为零或否则为空)
- 26. UISearchBar占位符文本颜色/位置
- 27. Powerpoint 2007 - 可以将占位符更改为标题占位符?
- 28. 如果函数值为空则返回
- 29. 如果VoiceOver在iPhone上打开,文本与占位符重叠
- 30. 如果数据未预先加载,则为只读文本框
我不明白您的博客中implementatoin中的tableView numberOfRowsInSection将返回1,即使没有视图,然后你做,如果([tableView numberOfRowsInSection:0]> 0)检查数字是否高于0,我相信它会一直是因为你是默认返回1,你能解释这个解决方案吗? – Necronet 2014-01-03 11:39:24
这个想法是,当表视图为空时,您有一个单独的数据源。在您的视图控制器中,如果底层数据发生变化(例如,用户添加/删除了某些内容),则检查哪个数据源适用。 – 2014-01-05 15:45:50
我不得不说这个解决方案在检查NXEmptyView类别后非常糟糕。它在CATEGORY中调用了reloadData和layoutSubviews方法,你如何确保调用者不使用相同的黑客方法?我之前通过相同的解决方案,但我更喜欢为自定义tableview构建独立的空视图类。 – Itachi 2016-03-09 05:36:50