Mark L
Mark L

Reputation: 759

Swift UITableviewCell color alteration

I'm working on a UITableView where I need to change the background color of every second cell to help visibility of the data.

To do this, I tried making a simple variable called "cellAlteration" which I set to 0 before Loading the data (So the first cell should always be white)

var cellAlteration: Int = 0

Then where I setup my cell I do the following:

        // #BackgroundColor
    if cellAlteration == 0 {
        self.backgroundColor = UIColor.whiteColor()
        cellAlteration = 1
    } else {
        self.backgroundColor = UIColor.formulaWhiteColor()
        cellAlteration = 0
    }

(I know this should be changed to a BOOL datatype instead of Int, but that seems irrelevant for my issue at this moment)

Here is an image of the result:

enter image description here

As you can see it's not alternating correctly.

When I've been trying to test this, it looks like it gets the cells that is loaded first correctly (UITableView only loads and displays the cells you can see) - the problem with the coloring doesn't seem to happen until I scroll down and the UITableView has to load and display new cells.

So since my simple variable check approach isn't working, what's the correct way to do cell alternation in Swift?

Any help would be greatly appreciated :)!

Upvotes: 1

Views: 904

Answers (1)

rdelmar
rdelmar

Reputation: 104082

You don't need a variable to do this. Base the color on whether the row is even or odd. Put this in cellForRowAtIndexPath after you dequeue a cell,

if indexPath.row % 2 == 0 {
    cell.backgroundColor = UIColor.whiteColor()
}else{
    cell.backgroundColor = UIColor.formulaWhiteColor()
}

Upvotes: 7

Related Questions