我有一个tableview
,有时候可能没有任何结果可供列出,所以我想要提出一些说“没有结果”的内容如果没有结果(标签或一个表视图单元格?)。
有最简单的方法吗?
我会在label
后面尝试tableview
,然后根据结果隐藏其中一个,但因为我正在使用TableViewController
而不是正常ViewController
我不确定那是多么聪明或可行。
我也使用Parse
并将子类化为PFQueryTableViewController
:
@interface TableViewController : PFQueryTableViewController
我可以提供所需的任何其他详细信息,请告诉我们!
故事板中的 TableViewController
场景:
编辑:每个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;
}
这是我得到的视图,它仍然有分隔线。我觉得这是一个很小的改变,但我不确定为什么分隔线会出现?
答案 0 :(得分:194)
您可以使用backgroundView
的{{1}}属性轻松实现这一目标。
目标C:
UITableView
<强>夫特:强>
- (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
<强>目标C 强>
var backgroundView: UIView?
讨论
表视图的背景视图会自动调整大小以匹配 表格视图的大小。此视图作为表的子视图放置 查看所有单元格,页眉视图和页脚视图后面。
您必须将此属性设置为nil才能设置背景颜色 表格视图。
答案 1 :(得分:90)
对于Xcode 8.3.2 - Swift 3.1
这是一个不那么知名但又非常简单的方法来实现添加&#34; No Items&#34;查看返回到Xcode 7的空表视图。我将让您控制将视图添加/删除到表的背景视图的逻辑,但这里是和Xcode的流程( 8.3.2)故事板:
答案 2 :(得分:30)
以上代码的Swift版本: -
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
var numOfSection: NSInteger = 0
if CCompanyLogoImage.count > 0 {
self.tableView.backgroundView = nil
numOfSection = 1
} else {
var noDataLabel: UILabel = UILabel(frame: CGRectMake(0, 0, self.tableView.bounds.size.width, self.tableView.bounds.size.height))
noDataLabel.text = "No Data Available"
noDataLabel.textColor = UIColor(red: 22.0/255.0, green: 106.0/255.0, blue: 176.0/255.0, alpha: 1.0)
noDataLabel.textAlignment = NSTextAlignment.Center
self.tableView.backgroundView = noDataLabel
}
return numOfSection
}
但是如果你从JSON加载信息,你需要检查JSON是否为空,因此,如果你输入这样的代码它最初显示“无数据”消息然后消失。因为在表重新加载数据后,消息会隐藏。因此,您可以将此代码放在将JSON数据加载到数组的位置。所以: -
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func extract_json(data:NSData) {
var error: NSError?
let jsonData: AnyObject? = NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions.MutableContainers , error: &error)
if (error == nil) {
if let jobs_list = jsonData as? NSArray
{
if jobs_list.count == 0 {
var noDataLabel: UILabel = UILabel(frame: CGRectMake(0, 0, self.tableView.bounds.size.width, self.tableView.bounds.size.height))
noDataLabel.text = "No Jobs Available"
noDataLabel.textColor = UIColor(red: 22.0/255.0, green: 106.0/255.0, blue: 176.0/255.0, alpha: 1.0)
noDataLabel.textAlignment = NSTextAlignment.Center
self.tableView.backgroundView = noDataLabel
}
for (var i = 0; i < jobs_list.count ; i++ )
{
if let jobs_obj = jobs_list[i] as? NSDictionary
{
if let vacancy_title = jobs_obj["VacancyTitle"] as? String
{
CJobTitle.append(vacancy_title)
if let vacancy_job_type = jobs_obj["VacancyJobType"] as? String
{
CJobType.append(vacancy_job_type)
if let company_name = jobs_obj["EmployerCompanyName"] as? String
{
CCompany.append(company_name)
if let company_logo_url = jobs_obj["EmployerCompanyLogo"] as? String
{
//CCompanyLogo.append("http://google.com" + company_logo_url)
let url = NSURL(string: "http://google.com" + company_logo_url )
let data = NSData(contentsOfURL:url!)
if data != nil {
CCompanyLogoImage.append(UIImage(data: data!)!)
}
if let vacancy_id = jobs_obj["VacancyID"] as? String
{
CVacancyId.append(vacancy_id)
}
}
}
}
}
}
}
}
}
do_table_refresh();
}
func do_table_refresh() {
dispatch_async(dispatch_get_main_queue(), {
self.tableView.reloadData()
return
})
}
答案 3 :(得分:7)
您可以尝试此控件。它非常整洁。 DZNEmptyDataSet
或者,如果我是你,我会做的就是
容易羞怯
答案 4 :(得分:5)
<强> Swift3.0 强>
我希望它服务于你的目的...... 在你的UITableViewController。
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if searchController.isActive && searchController.searchBar.text != "" {
if filteredContacts.count > 0 {
self.tableView.backgroundView = .none;
return filteredContacts.count
} else {
Helper.EmptyMessage(message: ConstantMap.NO_CONTACT_FOUND, viewController: self)
return 0
}
} else {
if contacts.count > 0 {
self.tableView.backgroundView = .none;
return contacts.count
} else {
Helper.EmptyMessage(message: ConstantMap.NO_CONTACT_FOUND, viewController: self)
return 0
}
}
}
具有功能的助手类:
/* Description: This function generate alert dialog for empty message by passing message and
associated viewcontroller for that function
- Parameters:
- message: message that require for empty alert message
- viewController: selected viewcontroller at that time
*/
static func EmptyMessage(message:String, viewController:UITableViewController) {
let messageLabel = UILabel(frame: CGRect(x: 0, y: 0, width: viewController.view.bounds.size.width, height: viewController.view.bounds.size.height))
messageLabel.text = message
let bubbleColor = UIColor(red: CGFloat(57)/255, green: CGFloat(81)/255, blue: CGFloat(104)/255, alpha :1)
messageLabel.textColor = bubbleColor
messageLabel.numberOfLines = 0;
messageLabel.textAlignment = .center;
messageLabel.font = UIFont(name: "TrebuchetMS", size: 18)
messageLabel.sizeToFit()
viewController.tableView.backgroundView = messageLabel;
viewController.tableView.separatorStyle = .none;
}
答案 5 :(得分:5)
Swift 3(已更新):
override func numberOfSections(in tableView: UITableView) -> Int {
if myArray.count > 0 {
self.tableView.backgroundView = nil
self.tableView.separatorStyle = .singleLine
return 1
}
let rect = CGRect(x: 0,
y: 0,
width: self.tableView.bounds.size.width,
height: self.tableView.bounds.size.height)
let noDataLabel: UILabel = UILabel(frame: rect)
noDataLabel.text = "Custom message."
noDataLabel.textColor = UIColor.white
noDataLabel.textAlignment = NSTextAlignment.center
self.tableView.backgroundView = noDataLabel
self.tableView.separatorStyle = .none
return 0
}
答案 6 :(得分:3)
我认为解决问题最优雅的方法是从UITableViewController
切换到包含UIViewController
的{{1}}。这样,您可以添加所需的UITableView
作为主视图的子视图。
我不建议使用UITableViewCell来执行此操作,您可能需要在将来添加其他内容,而且事情可能会变得非常丑陋。
您也可以这样做,但这也不是最佳解决方案。
UIView
答案 7 :(得分:3)
在numberOfSectionsInTableView
方法中使用此代码: -
if ([array count]==0
{
UILabel *fromLabel = [[UILabel alloc]initWithFrame:CGRectMake(50, self.view.frame.size.height/2, 300, 60)];
fromLabel.text =@"No Result";
fromLabel.baselineAdjustment = UIBaselineAdjustmentAlignBaselines;
fromLabel.backgroundColor = [UIColor clearColor];
fromLabel.textColor = [UIColor lightGrayColor];
fromLabel.textAlignment = NSTextAlignmentLeft;
[fromLabel setFont:[UIFont fontWithName:Embrima size:30.0f]];
[self.view addSubview:fromLabel];
[self.tblView setHidden:YES];
}
答案 8 :(得分:2)
SWIFT 3
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.white
noDataLabel.font = UIFont(name: "Open Sans", size: 15)
noDataLabel.textAlignment = .center
tableView.backgroundView = noDataLabel
tableView.separatorStyle = .none
答案 9 :(得分:2)
这是适合我的解决方案。
将以下代码添加到新文件中。
将您的表类更改为自定义类&#34; MyTableView&#34;来自storyboard或.xib
(这仅适用于第一部分。如果您想自定义更多内容,请相应地为其他部分更改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
}
}
}
}
答案 10 :(得分:1)
如果tableview没有结果,我会提供一个覆盖视图,其中包含您想要的外观和消息。您可以在ViewDidAppear中执行此操作,因此您可以在显示/不显示视图之前获得结果。
答案 11 :(得分:1)
如果您不使用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
答案 12 :(得分:1)
将此代码添加到一个文件中,然后将您的集合类型更改为CustomCollectionView
$>java -jar path/to/my/.jar
答案 13 :(得分:1)
如果您希望不使用任何代码即可执行此操作,请尝试此操作!
单击tableView。
将样式从“普通”更改为“分组”。
现在,当您使用....
tableView.backgroundView =插入标签或视图
它不会显示分隔符!