Paul
Paul

Reputation: 6176

How to hide content on specific cells only, despite using dequeueReusableCell?

I would like to hide some elements in a custom cell when we overpass a specific number of row. I added more row than the ones visible, because I needed to scroll until the last row without the bouncing effect. But now I have more cells, and I don't need the cells after row > 13.

I tried to setNeedsDisplay the cell with a if else, but the dequeue... method has a bad effect on the cells, when I scroll up, back to the previous cells, they don't have the texts anymore, like the row > 13. Is there a way to use the dequeue method, and let the content for the rows < 13, and remove the content for the rows > 13 ?

Here is some code :

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var identifier = ""

    if tableView == self.tableView{
        identifier = "MyCell"
        let cell = tableView.dequeueReusableCellWithIdentifier(identifier) as MyCell
        if indexPath.row < 14 {
            cell.showContent = true
            cell.label.text = "test\(indexPath.row)"
        }
        else {
            cell.showContent = false
            cell.label.text = ""
            cell.addItem.text = ""
        }
        cell.setNeedsDisplay()
        return cell
    }


//MyCell
override func drawRect(rect: CGRect) {
if !showContent {
    label.text = ""
    addItem.text = ""
}
else {
    let path = UIBezierPath()//custom separator that should not be drawn for row > 13

Thanks

Upvotes: 0

Views: 120

Answers (1)

Rob Napier
Rob Napier

Reputation: 299275

You shouldn't modify the text this way in drawRect. You already modified the labels in cellForRow. That's all you need.

That said, this isn't how I would do it. I'd probably create a different cell with its own identifier for empty cells. That way they can be really simple and you don't have to do things like cell.setNeedsDisplay() to get rid of the separator line. So in cellForRow, just return one kind of cell for data rows, and a different kind of cell for empty rows. There's no rule that says all the cells have to be the same class.

Upvotes: 1

Related Questions