如果没有表格视图结果,则在屏幕上显示“无结果”
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果没有表格视图结果,则在屏幕上显示“无结果”相关的知识,希望对你有一定的参考价值。
我有一个tableview
,有时可能没有任何结果列出,所以如果没有结果(标签或一个表视图单元?),我想提出一些说“没有结果”的东西。
有最简单的方法吗?
我会尝试在label
背后的tableview
,然后根据结果隐藏其中一个,但因为我正在使用TableViewController
而不是正常的ViewController
,我不确定这是多么聪明或可行。
我也使用Parse
和子类作为PFQueryTableViewController
:
@interface TableViewController : PFQueryTableViewController
我可以提供所需的任何其他详细信息,请告诉我!
故事板中的TableViewController
场景:
编辑:Per Midhun MP,这是我正在使用的代码
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
NSInteger numOfSections = 0;
if ([self.stringArray count] > 0)
{
self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
numOfSections = 1;
//yourTableView.backgroundView = nil;
self.tableView.backgroundView = nil;
}
else
{
UILabel *noDataLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.tableView.bounds.size.width, self.tableView.bounds.size.height)];
noDataLabel.text = @"No data available";
noDataLabel.textColor = [UIColor blackColor];
noDataLabel.textAlignment = NSTextAlignmentCenter;
//yourTableView.backgroundView = noDataLabel;
//yourTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
self.tableView.backgroundView = noDataLabel;
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
}
return numOfSections;
}
这是我得到的视图,它仍然有分隔线。我觉得这是一个小小的变化,但我不确定为什么分隔线会出现?
您可以使用backgroundView
的UITableView
属性轻松实现这一目标。
目标C:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
NSInteger numOfSections = 0;
if (youHaveData)
{
yourTableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
numOfSections = 1;
yourTableView.backgroundView = nil;
}
else
{
UILabel *noDataLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, yourTableView.bounds.size.width, yourTableView.bounds.size.height)];
noDataLabel.text = @"No data available";
noDataLabel.textColor = [UIColor blackColor];
noDataLabel.textAlignment = NSTextAlignmentCenter;
yourTableView.backgroundView = noDataLabel;
yourTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
}
return numOfSections;
}
迅速:
func numberOfSections(in tableView: UITableView) -> Int
{
var numOfSections: Int = 0
if youHaveData
{
tableView.separatorStyle = .singleLine
numOfSections = 1
tableView.backgroundView = nil
}
else
{
let noDataLabel: UILabel = UILabel(frame: CGRect(x: 0, y: 0, width: tableView.bounds.size.width, height: tableView.bounds.size.height))
noDataLabel.text = "No data available"
noDataLabel.textColor = UIColor.black
noDataLabel.textAlignment = .center
tableView.backgroundView = noDataLabel
tableView.separatorStyle = .none
}
return numOfSections
}
backgroundView
财产表视图的背景视图。
Declaration
迅速
var backgroundView: UIView?
Objective-C的
@property(nonatomic, readwrite, retain) UIView *backgroundView
Discussion
表视图的背景视图会自动调整大小以匹配表视图的大小。此视图作为所有单元格,页眉视图和页脚视图后面的表视图的子视图放置。
必须将此属性设置为nil才能设置表视图的背景颜色。
这是适合我的解决方案。
- 将以下代码添加到新文件中。
- 从storyboard或.xib将您的表类更改为自定义类“MyTableView”
(这仅适用于第一部分。如果要自定义更多,请相应地对其他部分进行MyTableView reloadData()函数的更改)
public class MyTableView: UITableView {
override public func reloadData() {
super.reloadData()
if self.numberOfRows(inSection: 0) == 0 {
if self.viewWithTag(1111) == nil {
let noDataLabel = UILabel()
noDataLabel.textAlignment = .center
noDataLabel.text = "No Data Available"
noDataLabel.tag = 1111
noDataLabel.center = self.center
self.backgroundView = noDataLabel
}
} else {
if self.viewWithTag(1111) != nil {
self.backgroundView = nil
}
}
}
}
如果tableview没有结果,我会提供一个覆盖视图,其中包含您想要的外观和消息。您可以在ViewDidAppear中执行此操作,因此您可以在显示/不显示视图之前获得结果。
如果您不使用tableview页脚并且不希望tableview用空的默认表格单元格填满屏幕,我建议您将tableview页脚设置为空的UIView。我不知道在obj-c或Swift中执行此操作的正确语法,但在Xamarin.ios中,我会这样做:
public class ViewController : UIViewController
{
UITableView _table;
public ViewController (IntPtr handle) : base (handle)
{
}
public override void ViewWillAppear(bool animated) {
// Initialize table
_table.TableFooterView = new UIView();
}
}
上面的代码将导致没有空单元格的tableview
如果你想在没有任何代码的情况下这样做,试试这个吧!
点击你的tableView。
将样式从“普通”更改为“分组”。
现在当你使用....
tableView.backgroundView =插入您的标签或视图
它不会显示分隔符!
将此代码添加到一个文件中,并将集合类型更改为CustomCollectionView
import Foundation
class CustomCollectionView: UICollectionView {
var emptyModel = EmptyMessageModel()
var emptyView: EmptyMessageView?
var showEmptyView: Bool = true
override func reloadData() {
super.reloadData()
emptyView?.removeFromSuperview()
self.backgroundView = nil
if !showEmptyView {
return
}
if numberOfSections < 1 {
let rect = CGRect(x: 0,
y: 0,
width: self.bounds.size.width,
height: self.bounds.size.height)
emptyView = EmptyMessageView()
emptyView?.frame = rect
if let emptyView = emptyView {
// self.addSubview(emptyView)
self.backgroundView = emptyView
}
emptyView?.setView(with: emptyModel)
} else {
emptyView?.removeFromSuperview()
self.backgroundView = nil
}
}
}
class EmptyMessageView: UIView {
@IBOutlet weak var messageLabel: UILabel!
@IBOutlet weak var imageView: UIImageView!
var view: UIView!
override init(frame: CGRect) {
super.init(frame: frame)
xibSetup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
xibSetup()
}
func xibSetup() {
view = loadViewFromNib()
view.frame = bounds
view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
addSubview(view)
}
func loadViewFromNib() -> UIView {
let bundle = Bundle(for: type(of: self))
let nib = UINib(nibName: "EmptyMessageView", bundle: bundle)
let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView
return view
}
func setView(with model: EmptyMessageModel) {
messageLabel.text = model.message ?? ""
imageView.image = model.image ?? #imageLiteral(resourceName: "no_notification")
}
}
///////////
class EmptyMessageModel {
var message: String?
var image: UIImage?
init(message: String = "No data available", image: UIImage = #imageLiteral(resourceName: "no_notification")) {
self.message = message
self.image = image
}
}
对于Xcode 8.3.2 - Swift 3.1
这是一个不太知名但非常简单的方法来实现向一个返回Xcode 7的空表视图添加“No Items”视图。我将留给你控制添加/删除的逻辑查看表的背景视图,但这里是和Xcode(8.3.2)故事板的流程:
- 在故事板中选择具有表视图的场景。
- 将空UIView拖动到该场景的“Scene Dock”
- 将UILabel和任何约束添加到新视图,然后为该视图创建IBOutlet
- 将该视图分配给tableView.backgroundView
- 看哪!
最终,这可以在您想要向视图控制器添加一个简单视图时使用,您不一定要立即显示,但您也不想手动编写代码。
以上代码的Swift版本: -
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
var numOfSection: NSInteger = 0
if CCompanyLogoImage.count > 0 {
self.tableView.backgroundView = nil
以上是关于如果没有表格视图结果,则在屏幕上显示“无结果”的主要内容,如果未能解决你的问题,请参考以下文章
无论是不是有搜索文本匹配,UISearchBar 都显示“无结果”
IOS/Objective-C:无结果时在tableview的背景视图中显示消息