当 UITableView 为空时显示图像
Display image when UITableView is empty
我试图在我的 UITableView 为空时显示图像,但由于某些原因,当 tableView 为空时代码不会 运行,但在有单元格时没问题:
// Configures cell
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject!) -> (PFTableViewCell!) {
let cell = tableView.dequeueReusableCellWithIdentifier("upcomingCell", forIndexPath: indexPath) as! UpcomingTVCell
cell.configureCell(object)
//makes it so the separators won't dissapear on us
self.tableView.separatorStyle = UITableViewCellSeparatorStyle.None
self.tableView.separatorStyle = UITableViewCellSeparatorStyle.SingleLine
if (self.objects?.count == nil) {
println("test")
UIGraphicsBeginImageContext(self.view.frame.size);
UIImage(named: "homeZero")?.drawInRect(self.view.bounds)
var backImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext();
self.tableView.backgroundColor = UIColor(patternImage: backImage)
} else {
self.tableView.backgroundColor = UIColor.whiteColor()
println("this other code ran")
}
return cell
}
我试过self.objects?.count == 0
,我试过使用numberOfRowsInSection
,我试过visibleCells
。
我错过了什么?
如果数据源中没有对象,则不会调用上面的函数。因此,您需要找到另一个地方来做。如果你的数据源是静态的(没有删除或添加操作),我建议检查 viewDidLoad
中的数据源是否为空。如果可以更改数据源,那么我建议在从数据源中删除对象的函数中进行更改。每次删除对象时,都会检查数据源,如果它变空则显示图像。
在您的 numberOfRowsInSection
委托中检查 self.objects?.count
如果它等于 0(无数据)则 return 1 否则 return 计数作为行数你的 table。这将允许 cellForRowAtIndexPath
委托触发,即使在没有数据的情况下也可以显示您的图像。
我将 UITableView
子类化并稍作修改。如果某个部分不包含单元格,则 table 显示 placeholder
视图。
class PlaceholderTableView: UITableView {
@IBOutlet var placeholder: UIView?
@IBInspectable var emptiableSection:Int = 0
override func reloadData() {
super.reloadData()
let count = self.numberOfRowsInSection(emptiableSection)
self.placeholder?.hidden = (count != 0)
}
}
我试图在我的 UITableView 为空时显示图像,但由于某些原因,当 tableView 为空时代码不会 运行,但在有单元格时没问题:
// Configures cell
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject!) -> (PFTableViewCell!) {
let cell = tableView.dequeueReusableCellWithIdentifier("upcomingCell", forIndexPath: indexPath) as! UpcomingTVCell
cell.configureCell(object)
//makes it so the separators won't dissapear on us
self.tableView.separatorStyle = UITableViewCellSeparatorStyle.None
self.tableView.separatorStyle = UITableViewCellSeparatorStyle.SingleLine
if (self.objects?.count == nil) {
println("test")
UIGraphicsBeginImageContext(self.view.frame.size);
UIImage(named: "homeZero")?.drawInRect(self.view.bounds)
var backImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext();
self.tableView.backgroundColor = UIColor(patternImage: backImage)
} else {
self.tableView.backgroundColor = UIColor.whiteColor()
println("this other code ran")
}
return cell
}
我试过self.objects?.count == 0
,我试过使用numberOfRowsInSection
,我试过visibleCells
。
我错过了什么?
如果数据源中没有对象,则不会调用上面的函数。因此,您需要找到另一个地方来做。如果你的数据源是静态的(没有删除或添加操作),我建议检查 viewDidLoad
中的数据源是否为空。如果可以更改数据源,那么我建议在从数据源中删除对象的函数中进行更改。每次删除对象时,都会检查数据源,如果它变空则显示图像。
在您的 numberOfRowsInSection
委托中检查 self.objects?.count
如果它等于 0(无数据)则 return 1 否则 return 计数作为行数你的 table。这将允许 cellForRowAtIndexPath
委托触发,即使在没有数据的情况下也可以显示您的图像。
我将 UITableView
子类化并稍作修改。如果某个部分不包含单元格,则 table 显示 placeholder
视图。
class PlaceholderTableView: UITableView {
@IBOutlet var placeholder: UIView?
@IBInspectable var emptiableSection:Int = 0
override func reloadData() {
super.reloadData()
let count = self.numberOfRowsInSection(emptiableSection)
self.placeholder?.hidden = (count != 0)
}
}