Отображать изображение, когда UITableView пуст
Я пытаюсь отобразить изображение, когда мой 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
,
Что мне не хватает?
3 ответа
Если в источнике данных нет объектов, указанная выше функция вызываться не будет. Следовательно, вам нужно найти другое место, чтобы сделать это. Если ваш источник данных является статическим (без операций удаления или добавления), я предлагаю проверить, является ли источник данных пустым в viewDidLoad
, Если источник данных может быть изменен, то я предлагаю сделать это в функции, где вы удаляете объект из источника данных. Каждый раз, когда вы удаляете объект, вы проверяете источник данных, если он становится пустым, то показываете изображение.
Я подкласс UITableView
с небольшими изменениями. Если раздел не содержит ячеек, то таблица показывает 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)
}
}
В вашем numberOfRowsInSection
проверка делегата self.objects?.count
если он равен 0 (нет данных), тогда верните 1, иначе верните счетчик как количество строк в вашей таблице. Это позволит cellForRowAtIndexPath
делегировать в огонь, даже там, где нет данных, чтобы вы могли показать свое изображение.