Отображать изображение, когда 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 делегировать в огонь, даже там, где нет данных, чтобы вы могли показать свое изображение.

Другие вопросы по тегам