我有一个 tableview
,有时可能没有任何结果要列出,所以我 would like to put something up that says "no results" 如果没有结果(标签或一个表视图单元?) .
有最简单的方法吗?
我会在 tableview
后面尝试一个 label
然后根据结果隐藏其中一个,但是因为我正在使用 TableViewController
而不是正常的 ViewController
我不确定这是多么聪明或可行 .
我也使用 Parse
并将子类化为 PFQueryTableViewController
:
@interface TableViewController : PFQueryTableViewController
我可以提供所需的任何其他详细信息,请告诉我!
TableViewController Scene in Storyboard:
EDIT: 每个Midhun MP,这里's the code I'米使用
- (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;
}
这是我得到的视图,它仍然有分隔线 . 我觉得这是一个小小的变化,但我不确定为什么分隔线会出现?
14 回答
您可以使用
UITableView
的backgroundView
属性轻松实现此目的 .Objective C:
Swift:
参考UITableView Class Reference
For Xcode 8.3.2 - Swift 3.1
这是一个不太知名但非常简单的方法来实现向一个返回Xcode 7的空表视图添加“No Items”视图 . 我将留给你控制添加/删除的逻辑查看表的背景视图,但这里是和Xcode(8.3.2)故事板的流程:
在故事板中选择具有表视图的场景 .
将空的UIView拖到该场景的"Scene Dock"
最终,这可以在您想要向视图控制器添加一个简单视图时使用,您不一定要立即显示,但您也不想手动编写代码 .
以上代码的Swift版本: -
但是如果要从JSON加载信息,则需要检查JSON是否为空,因此如果您放置这样的代码,它最初显示“无数据”消息然后消失 . 因为在表重新加载数据后,消息会隐藏 . 因此,您可以将此代码放在将JSON数据加载到数组的位置 . 所以: -
你可以试试这个控件 . 它非常整洁 . DZNEmptyDataSet
或者,如果我是你,我会做的就是
检查数据数组是否为空
如果为空,则向其添加一个名为@ "No Data"的对象
在cell.textLabel.text中显示该字符串
十分简单
Swift 3(更新):
Swift3.0
我希望它服务于你的目的......在你的UITableViewController中 .
Helper Class with function :
我认为解决问题最优雅的方法是从
UITableViewController
切换到包含UITableView
的UIViewController
. 这样,您可以添加任何UIView
作为主视图的子视图 .我不建议使用UITableViewCell来执行此操作,您可能需要在将来添加其他内容,并且事情可能会变得非常难看 .
你也可以这样做,但这也不是最好的解决方案 .
在
numberOfSectionsInTableView
方法中使用此代码: -这是适合我的解决方案 .
将以下代码添加到新文件中 .
将您的表类更改为storyboard或.xib中的自定义类“MyTableView”
(这仅适用于第一部分 . 如果要自定义更多,请相应地对其他部分进行MyTableView reloadData()函数的更改)
公共类MyTableView:UITableView {
}
如果tableview没有结果,我会提供一个覆盖视图,其中包含您想要的外观和消息 . 您可以在ViewDidAppear中执行此操作,因此您可以在显示/不显示视图之前获得结果 .
SWIFT 3
如果您不使用tableview页脚,并且不希望tableview用空默认值填充屏幕表格单元格我建议您将tableview页脚设置为空的UIView . 我不知道在obj-c或Swift中执行此操作的正确语法,但在Xamarin.iOS中,我会这样做:
上面的代码将导致没有空单元格的tableview
将此代码添加到一个文件中,并将集合类型更改为CustomCollectionView
进口基金会
class CustomCollectionView:UICollectionView {
}
class EmptyMessageView:UIView {
}
/////////// class EmptyMessageModel {var message:String? var image:UIImage?
}
如果你想在没有任何代码的情况下这样做,试试这个吧!
点击你的tableView .
将样式从“普通”更改为“分组” .
现在当你使用....
tableView.backgroundView =插入您的标签或视图
它不会显示分隔符!