The views of UITableView disappear

advertisements

I have a custom cell that is showing 14 different views. Depending on what data the cell is receiving it should show the views that are equal to the .count of some data, and the color should change depending on what data it is.

For instance:

If it is receiving three types of data, it should only show 3 views. Could be ice cream, candy, marshmellows. Then it would show three views, in orange (ice cream), blue (candy), green (marshmellows).

I got that working pretty well and I am excited about it. The problem is, if I have a cell showing three views and scroll down to a cell only containing 1 view (because the data was only one), then when I scroll up to the first cell again that should originally show three views, it is only showing 1, the first one..

I have an example:

My custom cell in storyboard is like this, the green and black boxes are the different views

This is what it looks like with 6 types of data:

When I then scroll down to a cell containing one view, the cell with 6 views will look like this afterwards:

Here is some relevant code:

Let me explain the code. In my database, every post has a category which is either 1 or 2. That is what the code is searching for, in update.category. If it is category 1, then it is just plain text. If it is category 2 ( or something else ) it should show the views, so I actually have to types of cells in my UITableViewController.

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let update = updates[indexPath.row]

    if update.category == 1 {

        let cell:updateTableViewCell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! updateTableViewCell

        cell.nameButton.setTitle(update.addedByUser, forState: .Normal)

        return cell

    } else {

        let cellSugar:newSugarTableViewCell = tableView.dequeueReusableCellWithIdentifier("CellSugar", forIndexPath: indexPath) as! newSugarTableViewCell

        cellSugar.nameButton.setTitle(update.addedByUser, forState: .Normal)

        let sugarArray = update.content.componentsSeparatedByString("--")

        dispatch_async(dispatch_get_main_queue(), { () -> Void in

            cellSugar.sugarViewOne.layer.cornerRadius = cellSugar.sugarViewOne.frame.size.width/2
            cellSugar.sugarViewOne.clipsToBounds = true
            cellSugar.sugarViewOne.layer.borderColor = UIColor.whiteColor().CGColor
            cellSugar.sugarViewOne.layer.borderWidth = 2.0

            cellSugar.sugarViewTwo.layer.cornerRadius = cellSugar.sugarViewTwo.frame.size.width/2
            cellSugar.sugarViewTwo.clipsToBounds = true
            cellSugar.sugarViewTwo.layer.borderColor = UIColor.whiteColor().CGColor
            cellSugar.sugarViewTwo.layer.borderWidth = 2.0
        })

        if sugarArray.count == 1 {

            dispatch_async(dispatch_get_main_queue(), { () -> Void in
                let seperateSugarArray = sugarArray[0].componentsSeparatedByString("#")

                if seperateSugarArray[4] == "Candy" {
                    cellSugar.sugarViewOne.backgroundColor = UIColor(red: 97.0/255.0, green: 194.0/255.0, blue: 231.0/255.0, alpha: 1.0) // Blå

                } else if seperateSugarArray[4] == "Ice cream" {
                    cellSugar.sugarViewOne.backgroundColor = UIColor(red: 35.0/255.0, green: 117.0/255.0, blue: 147.0/255.0, alpha: 1.0) // Mørke grå/blå

                } else if seperateSugarArray[4] == "Marshmellows" {
                    cellSugar.sugarViewOne.backgroundColor = UIColor(red: 75.0/255.0, green: 212.0/255.0, blue: 159.0/255.0, alpha: 1.0) // Tyrkis

                }

                cellSugar.sugarViewTwo.hidden = true
                cellSugar.sugarViewThree.hidden = true
                cellSugar.sugarViewFour.hidden = true
                cellSugar.sugarViewFive.hidden = true
                cellSugar.sugarViewSix.hidden = true
                cellSugar.sugarViewSeven.hidden = true
                cellSugar.sugarViewEight.hidden = true
                cellSugar.sugarViewNine.hidden = true
                cellSugar.sugarViewTen.hidden = true
                cellSugar.sugarViewEleven.hidden = true
                cellSugar.sugarViewTwelve.hidden = true
                cellSugar.sugarViewThirteen.hidden = true
                cellSugar.sugarViewFourteen.hidden = true
            })

        } else if sugarArray.count == 2 {
            dispatch_async(dispatch_get_main_queue(), { () -> Void in

                let seperateSugarArray = sugarArray[0].componentsSeparatedByString("#")
                let seperateSugarArrayTwo = sugarArray[1].componentsSeparatedByString("#")

                if seperateSugarArray[4] == "Candy" {
                    cellSugar.sugarViewOne.backgroundColor = UIColor(red: 97.0/255.0, green: 194.0/255.0, blue: 231.0/255.0, alpha: 1.0) // Blå

                } else if seperateSugarArray[4] == "Ice cream" {
                    cellSugar.sugarViewOne.backgroundColor = UIColor(red: 35.0/255.0, green: 117.0/255.0, blue: 147.0/255.0, alpha: 1.0) // Mørke grå/blå

                } else if seperateSugarArray[4] == "Marshmellows" {
                    cellSugar.sugarViewOne.backgroundColor = UIColor(red: 75.0/255.0, green: 212.0/255.0, blue: 159.0/255.0, alpha: 1.0) // Tyrkis

                }

                if seperateSugarArray[4] == "Candy" {
                    cellSugar.sugarViewTwo.backgroundColor = UIColor(red: 97.0/255.0, green: 194.0/255.0, blue: 231.0/255.0, alpha: 1.0) // Blå

                } else if seperateSugarArray[4] == "Ice cream" {
                    cellSugar.sugarViewTwo.backgroundColor = UIColor(red: 35.0/255.0, green: 117.0/255.0, blue: 147.0/255.0, alpha: 1.0) // Mørke grå/blå

                } else if seperateSugarArray[4] == "Marshmellows" {
                    cellSugar.sugarViewTwo.backgroundColor = UIColor(red: 75.0/255.0, green: 212.0/255.0, blue: 159.0/255.0, alpha: 1.0) // Tyrkis

                }

                cellSugar.sugarViewThree.hidden = true
                cellSugar.sugarViewFour.hidden = true
                cellSugar.sugarViewFive.hidden = true
                cellSugar.sugarViewSix.hidden = true
                cellSugar.sugarViewSeven.hidden = true
                cellSugar.sugarViewEight.hidden = true
                cellSugar.sugarViewNine.hidden = true
                cellSugar.sugarViewTen.hidden = true
                cellSugar.sugarViewEleven.hidden = true
                cellSugar.sugarViewTwelve.hidden = true
                cellSugar.sugarViewThirteen.hidden = true
                cellSugar.sugarViewFourteen.hidden = true

            })

        }

      return cellSugar
    }
}

I hope you understand and that you can help me, as it is pretty annoying :-)


You have to update all elements for each condition. the cause of your issue: the table view is reusing the cells so if you have a cell showing 5 labels and after scrolling you have another one has a 3 and the other 2 is hidden, when you scroll up again you have to make them visible again a table view is using the one with 2 hidden labels. In CellForRowAtIndexPath add the missing labels in each conditions or in your custom UItableViewCell class add the method prepareForReuseand make all the labels visible.